From 82663162b71333b1bdf3a38661317a96888f25e2 Mon Sep 17 00:00:00 2001 From: k8w Date: Thu, 23 Dec 2021 23:36:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=91=E5=87=BD=E6=95=B0=20examples?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/serverless-faas/README.md | 35 + examples/serverless-faas/backend/.gitignore | 3 + examples/serverless-faas/backend/.mocharc.js | 11 + .../backend/.vscode/launch.json | 30 + .../backend/.vscode/settings.json | 3 + examples/serverless-faas/backend/Dockerfile | 30 + examples/serverless-faas/backend/README.md | 31 + examples/serverless-faas/backend/package.json | 24 + .../serverless-faas/backend/src/aliyun-fc.ts | 26 + .../backend/src/api/ApiAddData.ts | 26 + .../backend/src/api/ApiGetData.ts | 13 + examples/serverless-faas/backend/src/index.ts | 8 + .../backend/src/models/server.ts | 19 + .../src/shared/protocols/PtlAddData.ts | 16 + .../src/shared/protocols/PtlGetData.ts | 19 + .../backend/src/shared/protocols/base.ts | 11 + .../src/shared/protocols/serviceProto.ts | 98 + .../backend/src/txcloud-scf.ts | 26 + .../backend/test/api/data.test.ts | 39 + .../backend/test/tsconfig.json | 15 + .../serverless-faas/backend/tsconfig.json | 18 + .../serverless-faas/backend/tsrpc.config.ts | 39 + examples/serverless-faas/backend/yarn.lock | 1315 ++++++ examples/serverless-faas/frontend/.gitignore | 3 + .../serverless-faas/frontend/package.json | 24 + .../frontend/public/favicon.ico | Bin 0 -> 4286 bytes .../serverless-faas/frontend/public/index.css | 83 + .../frontend/public/index.html | 29 + .../serverless-faas/frontend/src/client.ts | 10 + .../serverless-faas/frontend/src/env.d.ts | 9 + .../serverless-faas/frontend/src/index.ts | 50 + examples/serverless-faas/frontend/src/shared | 1 + .../serverless-faas/frontend/tsconfig.json | 23 + .../frontend/webpack.config.js | 56 + examples/serverless-faas/frontend/yarn.lock | 3624 +++++++++++++++++ 35 files changed, 5767 insertions(+) create mode 100644 examples/serverless-faas/README.md create mode 100644 examples/serverless-faas/backend/.gitignore create mode 100644 examples/serverless-faas/backend/.mocharc.js create mode 100644 examples/serverless-faas/backend/.vscode/launch.json create mode 100644 examples/serverless-faas/backend/.vscode/settings.json create mode 100644 examples/serverless-faas/backend/Dockerfile create mode 100644 examples/serverless-faas/backend/README.md create mode 100644 examples/serverless-faas/backend/package.json create mode 100644 examples/serverless-faas/backend/src/aliyun-fc.ts create mode 100644 examples/serverless-faas/backend/src/api/ApiAddData.ts create mode 100644 examples/serverless-faas/backend/src/api/ApiGetData.ts create mode 100644 examples/serverless-faas/backend/src/index.ts create mode 100644 examples/serverless-faas/backend/src/models/server.ts create mode 100644 examples/serverless-faas/backend/src/shared/protocols/PtlAddData.ts create mode 100644 examples/serverless-faas/backend/src/shared/protocols/PtlGetData.ts create mode 100644 examples/serverless-faas/backend/src/shared/protocols/base.ts create mode 100644 examples/serverless-faas/backend/src/shared/protocols/serviceProto.ts create mode 100644 examples/serverless-faas/backend/src/txcloud-scf.ts create mode 100644 examples/serverless-faas/backend/test/api/data.test.ts create mode 100644 examples/serverless-faas/backend/test/tsconfig.json create mode 100644 examples/serverless-faas/backend/tsconfig.json create mode 100644 examples/serverless-faas/backend/tsrpc.config.ts create mode 100644 examples/serverless-faas/backend/yarn.lock create mode 100644 examples/serverless-faas/frontend/.gitignore create mode 100644 examples/serverless-faas/frontend/package.json create mode 100644 examples/serverless-faas/frontend/public/favicon.ico create mode 100644 examples/serverless-faas/frontend/public/index.css create mode 100644 examples/serverless-faas/frontend/public/index.html create mode 100644 examples/serverless-faas/frontend/src/client.ts create mode 100644 examples/serverless-faas/frontend/src/env.d.ts create mode 100644 examples/serverless-faas/frontend/src/index.ts create mode 120000 examples/serverless-faas/frontend/src/shared create mode 100644 examples/serverless-faas/frontend/tsconfig.json create mode 100644 examples/serverless-faas/frontend/webpack.config.js create mode 100644 examples/serverless-faas/frontend/yarn.lock diff --git a/examples/serverless-faas/README.md b/examples/serverless-faas/README.md new file mode 100644 index 0000000..8997250 --- /dev/null +++ b/examples/serverless-faas/README.md @@ -0,0 +1,35 @@ +Serverless 云函数支持示例 +=== + +演示了示例项目中的留言板,同时支持阿里云函数计算(FC),腾讯云云函数(SCF),和原生 NodeJS 部署的支持。 + +主要方式是在后端项目中区分为 3 个不同的入口点: + +- `index.ts`:NodeJS 原生部署入口点 +- `aliyun-fc.ts`:阿里云函数计算 FC 入口点 + +- `txcloud-scf.ts`:腾讯云云函数 SCF 入口点 + +## 部署方式 + +### 阿里云 + +1. 创建 HTTP 函数,`npm run build` 然后将 `dist` 目录下的代码上传到阿里云根目录 +1. 在 Web IDE 终端执行命令: + ```shell + npm i + ``` +1. 配置 **函数入口** 为 `aliyun-fc.handler` +1. 配置 **初始化函数** 为 `aliyun-fc.initializer` +1. 测试运行 + +### 腾讯云 + +1. 创建 Event 函数,`npm run build` 然后将 `dist` 目录上传到腾讯云,并更名为 `src` 目录 +1. 在 Web IDE 终端执行命令: + ```shell + cd src + npm i + ``` +1. 配置 **执行函数** 为 `txcloud-scf.handler` +1. 测试运行 \ No newline at end of file diff --git a/examples/serverless-faas/backend/.gitignore b/examples/serverless-faas/backend/.gitignore new file mode 100644 index 0000000..d84f0da --- /dev/null +++ b/examples/serverless-faas/backend/.gitignore @@ -0,0 +1,3 @@ +node_modules +dist +.DS_STORE \ No newline at end of file diff --git a/examples/serverless-faas/backend/.mocharc.js b/examples/serverless-faas/backend/.mocharc.js new file mode 100644 index 0000000..108856a --- /dev/null +++ b/examples/serverless-faas/backend/.mocharc.js @@ -0,0 +1,11 @@ +module.exports = { + require: [ + 'ts-node/register', + ], + timeout: 999999, + exit: true, + spec: [ + './test/**/*.test.ts' + ], + 'preserve-symlinks': true +} \ No newline at end of file diff --git a/examples/serverless-faas/backend/.vscode/launch.json b/examples/serverless-faas/backend/.vscode/launch.json new file mode 100644 index 0000000..9ba4218 --- /dev/null +++ b/examples/serverless-faas/backend/.vscode/launch.json @@ -0,0 +1,30 @@ +{ + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "mocha current file", + "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha", + "args": [ + "${file}" + ], + "internalConsoleOptions": "openOnSessionStart", + "cwd": "${workspaceFolder}" + }, + { + "type": "node", + "request": "launch", + "name": "ts-node current file", + "protocol": "inspector", + "args": [ + "${relativeFile}" + ], + "cwd": "${workspaceRoot}", + "runtimeArgs": [ + "-r", + "ts-node/register" + ], + "internalConsoleOptions": "openOnSessionStart" + } + ] +} \ No newline at end of file diff --git a/examples/serverless-faas/backend/.vscode/settings.json b/examples/serverless-faas/backend/.vscode/settings.json new file mode 100644 index 0000000..00ad71f --- /dev/null +++ b/examples/serverless-faas/backend/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "typescript.tsdk": "node_modules\\typescript\\lib" +} \ No newline at end of file diff --git a/examples/serverless-faas/backend/Dockerfile b/examples/serverless-faas/backend/Dockerfile new file mode 100644 index 0000000..1a3c7b5 --- /dev/null +++ b/examples/serverless-faas/backend/Dockerfile @@ -0,0 +1,30 @@ +FROM node + +# 使用淘宝 NPM 镜像(国内机器构建推荐启用) +# RUN npm config set registry https://registry.npm.taobao.org/ + +# npm install +ADD package*.json /src/ +WORKDIR /src +RUN npm i + +# build +ADD . /src +RUN npm run build + +# clean +RUN npm prune --production + +# move +RUN rm -rf /app \ + && mv dist /app \ + && mv node_modules /app/ \ + && rm -rf /src + +# ENV +ENV NODE_ENV production + +EXPOSE 3000 + +WORKDIR /app +CMD node index.js \ No newline at end of file diff --git a/examples/serverless-faas/backend/README.md b/examples/serverless-faas/backend/README.md new file mode 100644 index 0000000..dbc7d25 --- /dev/null +++ b/examples/serverless-faas/backend/README.md @@ -0,0 +1,31 @@ +# TSRPC Server + +## Usage +### Local dev server + +Dev server would restart automatically when code changed. + +``` +npm run dev +``` + +### Build +``` +npm run build +``` + +### Generate API document + +Generate API document in swagger/openapi and markdown format. + +```shell +npm run doc +``` + +### Run unit Test +Execute `npm run dev` first, then execute: +``` +npm run test +``` + +--- \ No newline at end of file diff --git a/examples/serverless-faas/backend/package.json b/examples/serverless-faas/backend/package.json new file mode 100644 index 0000000..917347a --- /dev/null +++ b/examples/serverless-faas/backend/package.json @@ -0,0 +1,24 @@ +{ + "name": "serverless-faas-backend", + "version": "0.1.0", + "main": "index.js", + "private": true, + "scripts": { + "dev": "tsrpc-cli dev", + "build": "tsrpc-cli build", + "doc": "tsrpc-cli doc", + "test": "mocha test/**/*.test.ts" + }, + "devDependencies": { + "@types/mocha": "^8.2.3", + "@types/node": "^15.14.9", + "mocha": "^9.1.3", + "onchange": "^7.1.0", + "ts-node": "^10.4.0", + "tsrpc-cli": "^2.3.0", + "typescript": "^4.5.4" + }, + "dependencies": { + "tsrpc": "^3.1.4" + } +} \ No newline at end of file diff --git a/examples/serverless-faas/backend/src/aliyun-fc.ts b/examples/serverless-faas/backend/src/aliyun-fc.ts new file mode 100644 index 0000000..3370d5a --- /dev/null +++ b/examples/serverless-faas/backend/src/aliyun-fc.ts @@ -0,0 +1,26 @@ +// 阿里云 - 函数计算:FC +// https://cloud.tencent.com/product/scf + +import { init, server } from "./models/server"; + +// 阿里云函数计算 - HTTP函数 +export async function handler(req: any, res: any, context: any) { + // JSON 请求 + if (req.headers['content-type']?.includes('application/json')) { + let apiName = req.path.slice(1); // 去除开头的 "/" + let ret = await server.inputJSON(apiName, JSON.parse(req.body)); + res.setStatusCode(ret.isSucc ? 200 : 500); + res.send(JSON.stringify(ret)); + } + // 二进制请求 + else { + let output = await server.inputBuffer(req.body); + res.send(Buffer.from(output)); + } +} + +// 阿里云函数计算 - 初始化 +export async function initializer(context: unknown, callback: Function) { + await init(); + callback(); +} \ No newline at end of file diff --git a/examples/serverless-faas/backend/src/api/ApiAddData.ts b/examples/serverless-faas/backend/src/api/ApiAddData.ts new file mode 100644 index 0000000..c064789 --- /dev/null +++ b/examples/serverless-faas/backend/src/api/ApiAddData.ts @@ -0,0 +1,26 @@ +import { ApiCall } from "tsrpc"; +import { ReqAddData, ResAddData } from "../shared/protocols/PtlAddData"; +import { AllData } from "./ApiGetData"; + +// This is a demo code file +// Feel free to delete it + +export async function ApiAddData(call: ApiCall) { + // Error + if (call.req.content === '') { + call.error('Content is empty'); + return; + } + + let time = new Date(); + AllData.unshift({ + content: call.req.content, + time: time + }) + console.log('AllData', AllData) + + // Success + call.succ({ + time: time + }); +} \ No newline at end of file diff --git a/examples/serverless-faas/backend/src/api/ApiGetData.ts b/examples/serverless-faas/backend/src/api/ApiGetData.ts new file mode 100644 index 0000000..2996ee4 --- /dev/null +++ b/examples/serverless-faas/backend/src/api/ApiGetData.ts @@ -0,0 +1,13 @@ +import { ApiCall } from "tsrpc"; +import { ReqGetData, ResGetData } from "../shared/protocols/PtlGetData"; + +// This is a demo code file +// Feel free to delete it + +export async function ApiGetData(call: ApiCall) { + call.succ({ + data: AllData + }) +} + +export const AllData: { content: string, time: Date }[] = []; \ No newline at end of file diff --git a/examples/serverless-faas/backend/src/index.ts b/examples/serverless-faas/backend/src/index.ts new file mode 100644 index 0000000..9174103 --- /dev/null +++ b/examples/serverless-faas/backend/src/index.ts @@ -0,0 +1,8 @@ +import { init, server } from "./models/server"; + +// 普通 NodeJS 环境入口点 +async function main() { + await init(); + await server.start(); +}; +main(); \ No newline at end of file diff --git a/examples/serverless-faas/backend/src/models/server.ts b/examples/serverless-faas/backend/src/models/server.ts new file mode 100644 index 0000000..4ea6b65 --- /dev/null +++ b/examples/serverless-faas/backend/src/models/server.ts @@ -0,0 +1,19 @@ +import path from "path"; +import { HttpServer } from "tsrpc"; +import { serviceProto } from "../shared/protocols/serviceProto"; + +// Create the Server +export const server = new HttpServer(serviceProto, { + port: 3000, + // Remove this to use binary mode (remove from the client too) + json: true +}); + +// Initialize before server start +export async function init(delay?: boolean) { + // Auto implement APIs + await server.autoImplementApi(path.resolve(__dirname, '../api/'), delay); + + // TODO + // Prepare something... (e.g. connect the db) +}; \ No newline at end of file diff --git a/examples/serverless-faas/backend/src/shared/protocols/PtlAddData.ts b/examples/serverless-faas/backend/src/shared/protocols/PtlAddData.ts new file mode 100644 index 0000000..2aae061 --- /dev/null +++ b/examples/serverless-faas/backend/src/shared/protocols/PtlAddData.ts @@ -0,0 +1,16 @@ +// This is a demo code file +// Feel free to delete it + +/** + * 增加数据 + * 此处的注释将会自动附带到生成的 API 文档中 + */ +export interface ReqAddData { + /** 要增加的消息内容 */ + content: string; +} + +export interface ResAddData { + /** 服务端内容创建时间 */ + time: Date +} \ No newline at end of file diff --git a/examples/serverless-faas/backend/src/shared/protocols/PtlGetData.ts b/examples/serverless-faas/backend/src/shared/protocols/PtlGetData.ts new file mode 100644 index 0000000..a4ce9c9 --- /dev/null +++ b/examples/serverless-faas/backend/src/shared/protocols/PtlGetData.ts @@ -0,0 +1,19 @@ +// This is a demo code file +// Feel free to delete it + +/** + * 获取数据 + */ +export interface ReqGetData { + +} + +export interface ResGetData { + /** 返回所有数据列表 */ + data: { + /** 消息内容 */ + content: string, + /** 创建时间 */ + time: Date + }[] +} \ No newline at end of file diff --git a/examples/serverless-faas/backend/src/shared/protocols/base.ts b/examples/serverless-faas/backend/src/shared/protocols/base.ts new file mode 100644 index 0000000..cfbe28e --- /dev/null +++ b/examples/serverless-faas/backend/src/shared/protocols/base.ts @@ -0,0 +1,11 @@ +export interface BaseRequest { + +} + +export interface BaseResponse { + +} + +export interface BaseConf { + +} \ No newline at end of file diff --git a/examples/serverless-faas/backend/src/shared/protocols/serviceProto.ts b/examples/serverless-faas/backend/src/shared/protocols/serviceProto.ts new file mode 100644 index 0000000..e7207a9 --- /dev/null +++ b/examples/serverless-faas/backend/src/shared/protocols/serviceProto.ts @@ -0,0 +1,98 @@ +import { ServiceProto } from 'tsrpc-proto'; +import { ReqAddData, ResAddData } from './PtlAddData'; +import { ReqGetData, ResGetData } from './PtlGetData'; + +// This is a demo service proto file (auto generated) +// Feel free to delete it + +export interface ServiceType { + api: { + "AddData": { + req: ReqAddData, + res: ResAddData + }, + "GetData": { + req: ReqGetData, + res: ResGetData + } + }, + msg: { + + } +} + +export const serviceProto: ServiceProto = { + "version": 1, + "services": [ + { + "id": 0, + "name": "AddData", + "type": "api" + }, + { + "id": 1, + "name": "GetData", + "type": "api" + } + ], + "types": { + "PtlAddData/ReqAddData": { + "type": "Interface", + "properties": [ + { + "id": 0, + "name": "content", + "type": { + "type": "String" + } + } + ] + }, + "PtlAddData/ResAddData": { + "type": "Interface", + "properties": [ + { + "id": 0, + "name": "time", + "type": { + "type": "Date" + } + } + ] + }, + "PtlGetData/ReqGetData": { + "type": "Interface" + }, + "PtlGetData/ResGetData": { + "type": "Interface", + "properties": [ + { + "id": 0, + "name": "data", + "type": { + "type": "Array", + "elementType": { + "type": "Interface", + "properties": [ + { + "id": 0, + "name": "content", + "type": { + "type": "String" + } + }, + { + "id": 1, + "name": "time", + "type": { + "type": "Date" + } + } + ] + } + } + } + ] + } + } +}; \ No newline at end of file diff --git a/examples/serverless-faas/backend/src/txcloud-scf.ts b/examples/serverless-faas/backend/src/txcloud-scf.ts new file mode 100644 index 0000000..c2d1eb8 --- /dev/null +++ b/examples/serverless-faas/backend/src/txcloud-scf.ts @@ -0,0 +1,26 @@ +// 腾讯云 - 云函数:SCF +// https://cloud.tencent.com/product/scf + +import { init, server } from "./models/server"; + +export async function handler(event: any, context: any) { + // init + await ensureInit(); + + let apiName = event.path.slice(event.requestContext.path.length + 1); // 从 URL 中提取 ApiName + let ret = await server.inputJSON(apiName, JSON.parse(event.body)); + + return { + "statusCode": ret.isSucc ? 200 : 500, + "headers": { "Content-Type": "application/json" }, + "body": JSON.stringify(ret) + } +} + +let promiseInit: Promise | undefined; +async function ensureInit() { + if (!promiseInit) { + promiseInit = init(true); + } + return promiseInit; +} \ No newline at end of file diff --git a/examples/serverless-faas/backend/test/api/data.test.ts b/examples/serverless-faas/backend/test/api/data.test.ts new file mode 100644 index 0000000..99916f2 --- /dev/null +++ b/examples/serverless-faas/backend/test/api/data.test.ts @@ -0,0 +1,39 @@ +import assert from 'assert'; +import { HttpClient, TsrpcError } from 'tsrpc'; +import { serviceProto } from '../../src/shared/protocols/serviceProto'; + +// 1. EXECUTE `npm run dev` TO START A LOCAL DEV SERVER +// 2. EXECUTE `npm test` TO START UNIT TEST + +describe('ApiGetData', function () { + let client = new HttpClient(serviceProto, { + server: 'http://127.0.0.1:3000', + logger: console + }); + + it('AddData & GetData', async function () { + // Get data before add + let ret1 = await client.callApi('GetData', {}); + assert.strictEqual(ret1.isSucc, true); + + // AddData + let ret2 = await client.callApi('AddData', { content: 'AABBCC' }); + assert.strictEqual(ret2.isSucc, true); + + // Get data again, the new data should appear + let ret3 = await client.callApi('GetData', {}); + assert.strictEqual(ret3.isSucc, true); + assert.strictEqual(ret3.res!.data.length, ret1.res!.data.length + 1); + assert.strictEqual(ret3.res!.data[0].content, 'AABBCC'); + }); + + it('AddData: Check content is empty', async function () { + let ret = await client.callApi('AddData', { + content: '' + }); + assert.deepStrictEqual(ret, { + isSucc: false, + err: new TsrpcError('Content is empty') + }); + }) +}) \ No newline at end of file diff --git a/examples/serverless-faas/backend/test/tsconfig.json b/examples/serverless-faas/backend/test/tsconfig.json new file mode 100644 index 0000000..9fc6bcd --- /dev/null +++ b/examples/serverless-faas/backend/test/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "lib": [ + "es2018" + ], + "module": "commonjs", + "target": "es2018", + "outDir": "dist", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "moduleResolution": "node" + } +} \ No newline at end of file diff --git a/examples/serverless-faas/backend/tsconfig.json b/examples/serverless-faas/backend/tsconfig.json new file mode 100644 index 0000000..d18498f --- /dev/null +++ b/examples/serverless-faas/backend/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "lib": [ + "es2018" + ], + "module": "commonjs", + "target": "es2018", + "outDir": "dist", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "moduleResolution": "node" + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/examples/serverless-faas/backend/tsrpc.config.ts b/examples/serverless-faas/backend/tsrpc.config.ts new file mode 100644 index 0000000..32306a3 --- /dev/null +++ b/examples/serverless-faas/backend/tsrpc.config.ts @@ -0,0 +1,39 @@ +import { CodeTemplate, TsrpcConfig } from 'tsrpc-cli'; + +const tsrpcConf: TsrpcConfig = { + // Generate ServiceProto + proto: [ + { + ptlDir: 'src/shared/protocols', // Protocol dir + output: 'src/shared/protocols/serviceProto.ts', // Path for generated ServiceProto + apiDir: 'src/api', // API dir + docDir: 'docs', // API documents dir + ptlTemplate: CodeTemplate.getExtendedPtl(), + // msgTemplate: CodeTemplate.getExtendedMsg(), + } + ], + // Sync shared code + sync: [ + { + from: 'src/shared', + to: '../frontend/src/shared', + type: 'symlink' // Change this to 'copy' if your environment not support symlink + } + ], + // Dev server + dev: { + autoProto: true, // Auto regenerate proto + autoSync: true, // Auto sync when file changed + autoApi: true, // Auto create API when ServiceProto updated + watch: 'src', // Restart dev server when these files changed + entry: 'src/index.ts', // Dev server command: node -r ts-node/register {entry} + }, + // Build config + build: { + autoProto: true, // Auto generate proto before build + autoSync: true, // Auto sync before build + autoApi: true, // Auto generate API before build + outDir: 'dist', // Clean this dir before build + } +} +export default tsrpcConf; \ No newline at end of file diff --git a/examples/serverless-faas/backend/yarn.lock b/examples/serverless-faas/backend/yarn.lock new file mode 100644 index 0000000..cb3612f --- /dev/null +++ b/examples/serverless-faas/backend/yarn.lock @@ -0,0 +1,1315 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@blakeembrey/deque@^1.0.5": + version "1.0.5" + resolved "https://registry.npmmirror.com/@blakeembrey/deque/download/@blakeembrey/deque-1.0.5.tgz#f4fa17fc5ee18317ec01a763d355782c7b395eaf" + integrity sha1-9PoX/F7hgxfsAadj01V4LHs5Xq8= + +"@blakeembrey/template@^1.0.0": + version "1.0.0" + resolved "https://registry.npmmirror.com/@blakeembrey/template/download/@blakeembrey/template-1.0.0.tgz#bf8828bc3ae8004d97904d78f64e3cc2cd216438" + integrity sha1-v4govDroAE2XkE149k48ws0hZDg= + +"@cspotcode/source-map-consumer@0.8.0": + version "0.8.0" + resolved "https://registry.npmmirror.com/@cspotcode/source-map-consumer/download/@cspotcode/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" + integrity sha1-M79LeznBeIIWBvZpu8RHpqYpeGs= + +"@cspotcode/source-map-support@0.7.0": + version "0.7.0" + resolved "https://registry.npmmirror.com/@cspotcode/source-map-support/download/@cspotcode/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5" + integrity sha1-R4mECqhZ5G0vMXNyercHxmvzRPU= + dependencies: + "@cspotcode/source-map-consumer" "0.8.0" + +"@tsconfig/node10@^1.0.7": + version "1.0.8" + resolved "https://registry.npmmirror.com/@tsconfig/node10/download/@tsconfig/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" + integrity sha1-weToDW+WT77LM1nEO9SLQPfK2tk= + +"@tsconfig/node12@^1.0.7": + version "1.0.9" + resolved "https://registry.npmmirror.com/@tsconfig/node12/download/@tsconfig/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c" + integrity sha1-YsH23uLr2a6tgNw6+laBDljhoEw= + +"@tsconfig/node14@^1.0.0": + version "1.0.1" + resolved "https://registry.npmmirror.com/@tsconfig/node14/download/@tsconfig/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2" + integrity sha1-lfLRZ/+5uNIGiwsjUwL6/U33EfI= + +"@tsconfig/node16@^1.0.2": + version "1.0.2" + resolved "https://registry.npmmirror.com/@tsconfig/node16/download/@tsconfig/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" + integrity sha1-Qjx3h30Fadsg4fyAiFrEEYMUAQ4= + +"@types/mocha@^8.2.3": + version "8.2.3" + resolved "https://registry.npmmirror.com/@types/mocha/download/@types/mocha-8.2.3.tgz?cache=0&sync_timestamp=1637283988208&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fmocha%2Fdownload%2F%40types%2Fmocha-8.2.3.tgz#bbeb55fbc73f28ea6de601fbfa4613f58d785323" + integrity sha1-u+tV+8c/KOpt5gH7+kYT9Y14UyM= + +"@types/node@*": + version "17.0.4" + resolved "https://registry.npmmirror.com/@types/node/download/@types/node-17.0.4.tgz#fec0ce0526abb6062fd206d72a642811b887a111" + integrity sha512-6xwbrW4JJiJLgF+zNypN5wr2ykM9/jHcL7rQ8fZe2vuftggjzZeRSM4OwRc6Xk8qWjwJ99qVHo/JgOGmomWRog== + +"@types/node@^15.14.9": + version "15.14.9" + resolved "https://registry.npmmirror.com/@types/node/download/@types/node-15.14.9.tgz#bc43c990c3c9be7281868bbc7b8fdd6e2b57adfa" + integrity sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A== + +"@types/ws@^7.4.7": + version "7.4.7" + resolved "https://registry.npmmirror.com/@types/ws/download/@types/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" + integrity sha1-98OQo296Bnmqad4tUBMZ9PjZtwI= + dependencies: + "@types/node" "*" + +"@ungap/promise-all-settled@1.1.2": + version "1.1.2" + resolved "https://registry.npmmirror.com/@ungap/promise-all-settled/download/@ungap/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" + integrity sha1-qlgEJxHW4ydd033Fl+XTHowpCkQ= + +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.npmmirror.com/acorn-walk/download/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha1-dBIQ8uJCZFRQiFOi9E0KuDt/acE= + +acorn@^8.4.1: + version "8.6.0" + resolved "https://registry.npmmirror.com/acorn/download/acorn-8.6.0.tgz?cache=0&sync_timestamp=1637225522161&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Facorn%2Fdownload%2Facorn-8.6.0.tgz#e3692ba0eb1a0c83eaa4f37f5fa7368dd7142895" + integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw== + +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.npmmirror.com/ansi-colors/download/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha1-y7muJWv3UK8eqzRPIpqif+lLo0g= + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.npmmirror.com/ansi-escapes/download/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha1-ayKR0dt9mLZSHV8e+kLQ86n+tl4= + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/ansi-regex/download/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha1-CCyyyJyf6GWaMRpTvWpNxTAdswQ= + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/ansi-styles/download/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha1-7dgDYornHATIWuegkG7a00tkiTc= + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.npmmirror.com/anymatch/download/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha1-wFV8CWrzLxBhmPT04qODU343hxY= + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0, arg@^4.1.3: + version "4.1.3" + resolved "https://registry.npmmirror.com/arg/download/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/argparse/download/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha1-JG9Q88p4oyQPbJl+ipvR6sSeSzg= + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/balanced-match/download/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4= + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npmmirror.com/base64-js/download/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha1-GxtEAWClv3rUC2UPCVljSBkDkwo= + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/binary-extensions/download/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0= + +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/bl/download/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha1-RRU1JkGCvsL7vIOmKrmM8R2fezo= + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmmirror.com/brace-expansion/download/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0= + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/braces/download/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha1-NFThpGLujVmeI23zNs2epPiv4Qc= + dependencies: + fill-range "^7.0.1" + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.npmmirror.com/browser-stdout/download/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha1-uqVZ7hTO1zRSIputcyZGfGH6vWA= + +bson@*: + version "4.6.0" + resolved "https://registry.npmmirror.com/bson/download/bson-4.6.0.tgz#15c3b39ba3940c3d915a0c44d51459f4b4fbf1b2" + integrity sha512-8jw1NU1hglS+Da1jDOUYuNcBJ4cNHCFIqzlwoFNnsTOg2R/ox0aTYcTiBN4dzRa9q7Cvy6XErh3L8ReTEb9AQQ== + dependencies: + buffer "^5.6.0" + +buffer@^5.5.0, buffer@^5.6.0: + version "5.7.1" + resolved "https://registry.npmmirror.com/buffer/download/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +camelcase@^6.0.0: + version "6.2.1" + resolved "https://registry.npmmirror.com/camelcase/download/camelcase-6.2.1.tgz?cache=0&sync_timestamp=1636945190375&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcamelcase%2Fdownload%2Fcamelcase-6.2.1.tgz#250fd350cfd555d0d2160b1d51510eaf8326e86e" + integrity sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA== + +chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.npmmirror.com/chalk/download/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha1-qsTit3NKdAhnrrFr8CqtVWoeegE= + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.npmmirror.com/chardet/download/chardet-0.7.0.tgz?cache=0&sync_timestamp=1634639163489&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fchardet%2Fdownload%2Fchardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha1-kAlISfCTfy7twkJdDSip5fDLrZ4= + +chokidar@3.5.2, chokidar@^3.3.1, chokidar@^3.5.2: + version "3.5.2" + resolved "https://registry.npmmirror.com/chokidar/download/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/cli-cursor/download/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha1-JkMFp65JDR0Dvwybp8kl0XU68wc= + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.5.0: + version "2.6.1" + resolved "https://registry.npmmirror.com/cli-spinners/download/cli-spinners-2.6.1.tgz?cache=0&sync_timestamp=1633109592807&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcli-spinners%2Fdownload%2Fcli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + integrity sha1-rclU6+KBw3pjGb+kAebdJIj/tw0= + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/cli-width/download/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha1-ovSEN6LKqaIkNueUvwceyeYc7fY= + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.npmmirror.com/cliui/download/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha1-oCZe5lVHb8gHrqnfPfjfd4OAi08= + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npmmirror.com/clone/download/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/color-convert/download/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM= + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmmirror.com/color-name/download/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha1-wqCah6y95pVD3m9j+jmVyCbFNqI= + +colors@^1.1.2: + version "1.4.0" + resolved "https://registry.npmmirror.com/colors/download/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha1-xQSRR51MG9rtLJztMs98fcI2D3g= + +commander@^2.19.0: + version "2.20.3" + resolved "https://registry.npmmirror.com/commander/download/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commandpost@^1.0.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/commandpost/download/commandpost-1.4.0.tgz#89218012089dfc9b67a337ba162f15c88e0f1048" + integrity sha1-iSGAEgid/Jtnoze6Fi8VyI4PEEg= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmmirror.com/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.npmmirror.com/create-require/download/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha1-wdfo8eX2z8n/ZfnNNS03NIdWwzM= + +cross-spawn@^7.0.0, cross-spawn@^7.0.1: + version "7.0.3" + resolved "https://registry.npmmirror.com/cross-spawn/download/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha1-9zqFudXUHQRVUcF34ogtSshXKKY= + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@4.3.2: + version "4.3.2" + resolved "https://registry.npmmirror.com/debug/download/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== + dependencies: + ms "2.1.2" + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/decamelize/download/decamelize-4.0.0.tgz?cache=0&sync_timestamp=1633055713394&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fdecamelize%2Fdownload%2Fdecamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha1-qkcte/Zg6xXzSU79UxyrfypwmDc= + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/defaults/download/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + +diff@5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/diff/download/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha1-ftatdthZ0DB4fsNYVfWx2vMdhSs= + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.npmmirror.com/diff/download/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha1-YPOuy4nV+uUgwRqhnvwruYKq3n0= + +editorconfig@^0.15.0: + version "0.15.3" + resolved "https://registry.npmmirror.com/editorconfig/download/editorconfig-0.15.3.tgz#bef84c4e75fb8dcb0ce5cee8efd51c15999befc5" + integrity sha1-vvhMTnX7jcsM5c7o79UcFZmb78U= + dependencies: + commander "^2.19.0" + lru-cache "^4.1.5" + semver "^5.6.0" + sigmund "^1.0.1" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmmirror.com/emoji-regex/download/emoji-regex-8.0.0.tgz?cache=0&sync_timestamp=1632752198735&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Femoji-regex%2Fdownload%2Femoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc= + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.npmmirror.com/end-of-stream/download/end-of-stream-1.4.4.tgz?cache=0&sync_timestamp=1632469585035&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fend-of-stream%2Fdownload%2Fend-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha1-WuZKX0UFe682JuwU2gyl5LJDHrA= + dependencies: + once "^1.4.0" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmmirror.com/escalade/download/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA= + +escape-string-regexp@4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/escape-string-regexp/download/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ= + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +execa@^4.0.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/execa/download/execa-4.1.0.tgz?cache=0&sync_timestamp=1637147236741&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fexeca%2Fdownload%2Fexeca-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha1-TlSRrRVy8vF6d9OIxshXE1sihHo= + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.npmmirror.com/external-editor/download/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha1-ywP3QL764D6k0oPK7SdBqD8zVJU= + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.npmmirror.com/figures/download/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha1-YlwYvSk8YE3EqN2y/r8MiDQXRq8= + dependencies: + escape-string-regexp "^1.0.5" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmmirror.com/fill-range/download/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha1-GRmmp8df44ssfHflGYU12prN2kA= + dependencies: + to-regex-range "^5.0.1" + +find-up@5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/find-up/download/find-up-5.0.0.tgz?cache=0&sync_timestamp=1633618659233&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffind-up%2Fdownload%2Ffind-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha1-TJKBnstwg1YeT0okCoa+UZj1Nvw= + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.npmmirror.com/flat/download/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha1-jKb+MyBp/6nTJMMnGYxZglnOskE= + +fs-extra@^10.0.0: + version "10.0.0" + resolved "https://registry.npmmirror.com/fs-extra/download/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1" + integrity sha1-n/YbZV3eU/s0qC34S7IUzoAuF8E= + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.npmmirror.com/fsevents/download/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro= + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.npmmirror.com/get-caller-file/download/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha1-T5RBKoLbMvNuOwuXQfipf+sDH34= + +get-stream@^5.0.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/get-stream/download/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha1-SWaheV7lrOZecGxLe+txJX1uItM= + dependencies: + pump "^3.0.0" + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmmirror.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1632953971963&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ= + dependencies: + is-glob "^4.0.1" + +glob@7.1.7: + version "7.1.7" + resolved "https://registry.npmmirror.com/glob/download/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.2.0: + version "7.2.0" + resolved "https://registry.npmmirror.com/glob/download/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.8" + resolved "https://registry.npmmirror.com/graceful-fs/download/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" + integrity sha1-5BK40z9eAGWTy9PO5t+fLOu+gCo= + +growl@1.10.5: + version "1.10.5" + resolved "https://registry.npmmirror.com/growl/download/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha1-8nNdwig2dPpnR4sQGBBZNVw2nl4= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/has-flag/download/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s= + +he@1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/he/download/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha1-hK5l+n6vsWX922FWauFLrwVmTw8= + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/human-signals/download/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha1-xbHNFPUK6uCatsWf5jujOV/k36M= + +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.npmmirror.com/iconv-lite/download/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha1-ICK0sl+93CHS9SSXSkdKr+czkIs= + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.npmmirror.com/ieee754/download/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I= + +ignore@^5.1.4: + version "5.2.0" + resolved "https://registry.npmmirror.com/ignore/download/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmmirror.com/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@^2.0.4: + version "2.0.4" + resolved "https://registry.npmmirror.com/inherits/download/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w= + +inquirer@^8.2.0: + version "8.2.0" + resolved "https://registry.npmmirror.com/inquirer/download/inquirer-8.2.0.tgz#f44f008dd344bbfc4b30031f45d984e034a3ac3a" + integrity sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.2.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +invert-kv@^3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/invert-kv/download/invert-kv-3.0.1.tgz#a93c7a3d4386a1dc8325b97da9bb1620c0282523" + integrity sha1-qTx6PUOGodyDJbl9qbsWIMAoJSM= + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/is-binary-path/download/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk= + dependencies: + binary-extensions "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/is-extglob/download/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0= + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmmirror.com/is-glob/download/is-glob-4.0.3.tgz?cache=0&sync_timestamp=1632934382080&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fis-glob%2Fdownload%2Fis-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha1-ZPYeQsu7LuwgcanawLKLoeZdUIQ= + dependencies: + is-extglob "^2.1.1" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/is-interactive/download/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha1-zqbmrlyHCnsKAAQHC3tYfgJSkS4= + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/is-number/download/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss= + +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/is-plain-obj/download/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha1-ReQuN/zPH0Dajl927iFRWEDAkoc= + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/is-stream/download/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha1-+sHj1TuXrVqdCunO8jifWBClwHc= + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/is-unicode-supported/download/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha1-PybHaoCVk7Ur+i7LVxDtJ3m1Iqc= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +js-yaml@4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/js-yaml/download/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha1-wftl+PUBeQHN0slRhkuhhFihBgI= + dependencies: + argparse "^2.0.1" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.npmmirror.com/jsonfile/download/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha1-vFWyY0eTxnnsZAMJTrE2mKbsCq4= + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +k8w-crypto@^0.2.0: + version "0.2.0" + resolved "https://registry.npmmirror.com/k8w-crypto/download/k8w-crypto-0.2.0.tgz#00e6f3027832eeade06fd79c9c3a1ebfb76c964f" + integrity sha1-AObzAngy7q3gb9ecnDoev7dslk8= + +k8w-extend-native@^1.4.6: + version "1.4.6" + resolved "https://registry.npmmirror.com/k8w-extend-native/download/k8w-extend-native-1.4.6.tgz#d3008c60f3f85e5b2f2bd8617ff4a5bc9cf743a6" + integrity sha1-0wCMYPP4XlsvK9hhf/SlvJz3Q6Y= + dependencies: + k8w-linq-array "*" + k8w-super-date "*" + k8w-super-object "*" + +k8w-linq-array@*: + version "0.2.8" + resolved "https://registry.npmmirror.com/k8w-linq-array/download/k8w-linq-array-0.2.8.tgz#1ef4d4a2943552cbd5f633a5d9b8e831dc8abd6e" + integrity sha1-HvTUopQ1UsvV9jOl2bjoMdyKvW4= + +k8w-super-date@*: + version "0.1.3" + resolved "https://registry.npmmirror.com/k8w-super-date/download/k8w-super-date-0.1.3.tgz#4f53a39f2b74e21b11268926b710e5a7c27f8848" + integrity sha1-T1Ojnyt04hsRJokmtxDlp8J/iEg= + +k8w-super-object@*: + version "0.3.0" + resolved "https://registry.npmmirror.com/k8w-super-object/download/k8w-super-object-0.3.0.tgz#6430d14956aaf3a936fda7776b0897a04db331dd" + integrity sha1-ZDDRSVaq86k2/ad3awiXoE2zMd0= + +lcid@^3.0.0: + version "3.1.1" + resolved "https://registry.npmmirror.com/lcid/download/lcid-3.1.1.tgz#9030ec479a058fc36b5e8243ebaac8b6ac582fd0" + integrity sha1-kDDsR5oFj8NrXoJD66rItqxYL9A= + dependencies: + invert-kv "^3.0.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/locate-path/download/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha1-VTIeswn+u8WcSAHZMackUqaB0oY= + dependencies: + p-locate "^5.0.0" + +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.npmmirror.com/lodash/download/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@4.1.0, log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/log-symbols/download/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha1-P727lbRoOsn8eFER55LlWNSr1QM= + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +lru-cache@^4.1.5: + version "4.1.5" + resolved "https://registry.npmmirror.com/lru-cache/download/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80= + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.npmmirror.com/make-error/download/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha1-LrLjfqm2fEiR9oShOUeZr0hM96I= + +map-age-cleaner@^0.1.3: + version "0.1.3" + resolved "https://registry.npmmirror.com/map-age-cleaner/download/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha1-fVg6cwZDTAVf5HSw9FB45uG0uSo= + dependencies: + p-defer "^1.0.0" + +mem@^5.0.0: + version "5.1.1" + resolved "https://registry.npmmirror.com/mem/download/mem-5.1.1.tgz#7059b67bf9ac2c924c9f1cff7155a064394adfb3" + integrity sha1-cFm2e/msLJJMnxz/cVWgZDlK37M= + dependencies: + map-age-cleaner "^0.1.3" + mimic-fn "^2.1.0" + p-is-promise "^2.1.0" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/merge-stream/download/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A= + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/mimic-fn/download/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs= + +minimatch@3.0.4, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/minimatch/download/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM= + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.npmmirror.com/minimist/download/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI= + +mocha@^9.1.3: + version "9.1.3" + resolved "https://registry.npmmirror.com/mocha/download/mocha-9.1.3.tgz?cache=0&sync_timestamp=1634283119059&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmocha%2Fdownload%2Fmocha-9.1.3.tgz#8a623be6b323810493d8c8f6f7667440fa469fdb" + integrity sha1-imI75rMjgQST2Mj292Z0QPpGn9s= + dependencies: + "@ungap/promise-all-settled" "1.1.2" + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.2" + debug "4.3.2" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.1.7" + growl "1.10.5" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "3.0.4" + ms "2.1.3" + nanoid "3.1.25" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + which "2.0.2" + workerpool "6.1.5" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmmirror.com/ms/download/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk= + +ms@2.1.3: + version "2.1.3" + resolved "https://registry.npmmirror.com/ms/download/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha1-V0yBOM4dK1hh8LRFedut1gxmFbI= + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.npmmirror.com/mute-stream/download/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha1-FjDEKyJR/4HiooPelqVJfqkuXg0= + +nanoid@3.1.25: + version "3.1.25" + resolved "https://registry.npmmirror.com/nanoid/download/nanoid-3.1.25.tgz#09ca32747c0e543f0e1814b7d3793477f9c8e152" + integrity sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q== + +node-json-color-stringify@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/node-json-color-stringify/download/node-json-color-stringify-1.1.0.tgz#8bb124f913859591058026513121d6609d6ef5b7" + integrity sha1-i7Ek+ROFlZEFgCZRMSHWYJ1u9bc= + dependencies: + colors "^1.1.2" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/normalize-path/download/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU= + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.npmmirror.com/npm-run-path/download/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha1-t+zR5e1T2o43pV4cImnguX7XSOo= + dependencies: + path-key "^3.0.0" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onchange@^7.1.0: + version "7.1.0" + resolved "https://registry.npmmirror.com/onchange/download/onchange-7.1.0.tgz#a6f0f7733e4d47014b4cd70aa1ad36c2b4cf3804" + integrity sha1-pvD3cz5NRwFLTNcKoa02wrTPOAQ= + dependencies: + "@blakeembrey/deque" "^1.0.5" + "@blakeembrey/template" "^1.0.0" + arg "^4.1.3" + chokidar "^3.3.1" + cross-spawn "^7.0.1" + ignore "^5.1.4" + tree-kill "^1.2.2" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.npmmirror.com/onetime/download/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4= + dependencies: + mimic-fn "^2.1.0" + +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.npmmirror.com/ora/download/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha1-GyZ4Qmr0rEpQkAjl5KyemVnbnhg= + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-locale@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/os-locale/download/os-locale-5.0.0.tgz#6d26c1d95b6597c5d5317bf5fba37eccec3672e0" + integrity sha1-bSbB2Vtll8XVMXv1+6N+zOw2cuA= + dependencies: + execa "^4.0.0" + lcid "^3.0.0" + mem "^5.0.0" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/os-tmpdir/download/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/p-defer/download/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/p-is-promise/download/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha1-kYzrrqJIpiz3/6uOO8qMX4gvxC4= + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npmmirror.com/p-limit/download/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha1-4drMvnjQ0TiMoYxk/qOOPlfjcGs= + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/p-locate/download/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha1-g8gxXGeFAF470CGDlBHJ4RDm2DQ= + dependencies: + p-limit "^3.0.2" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/path-exists/download/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha1-UTvb4tO5XXdi6METfvoZXGxhtbM= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmmirror.com/path-key/download/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U= + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.0" + resolved "https://registry.npmmirror.com/picomatch/download/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha1-8fBh3o9qS/AiiS4tEoI0+5gwKXI= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/pseudomap/download/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/pump/download/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ= + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/randombytes/download/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo= + dependencies: + safe-buffer "^5.1.0" + +readable-stream@^3.4.0: + version "3.6.0" + resolved "https://registry.npmmirror.com/readable-stream/download/readable-stream-3.6.0.tgz?cache=0&sync_timestamp=1632380409088&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha1-M3u9o63AcGvT4CRCaihtS0sskZg= + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmmirror.com/readdirp/download/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc= + dependencies: + picomatch "^2.2.1" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/require-directory/download/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/restore-cursor/download/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha1-OfZ8VLOnpYzqUjbZXPADQjljH34= + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.npmmirror.com/run-async/download/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU= + +rxjs@^7.2.0: + version "7.4.0" + resolved "https://registry.npmmirror.com/rxjs/download/rxjs-7.4.0.tgz#a12a44d7eebf016f5ff2441b87f28c9a51cebc68" + integrity sha1-oSpE1+6/AW9f8kQbh/KMmlHOvGg= + dependencies: + tslib "~2.1.0" + +safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmmirror.com/safe-buffer/download/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY= + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.npmmirror.com/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo= + +semver@^5.6.0: + version "5.7.1" + resolved "https://registry.npmmirror.com/semver/download/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc= + +serialize-javascript@6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/serialize-javascript/download/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha1-765diPRdeSQUHai1w6en5mP+/rg= + dependencies: + randombytes "^2.1.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/shebang-command/download/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo= + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/shebang-regex/download/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI= + +sigmund@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/sigmund/download/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" + integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= + +signal-exit@^3.0.2: + version "3.0.6" + resolved "https://registry.npmmirror.com/signal-exit/download/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" + integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.3" + resolved "https://registry.npmmirror.com/string-width/download/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha1-JpxxF9J7Ba0uU2gwqOyJXvnG0BA= + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmmirror.com/string_decoder/download/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4= + dependencies: + safe-buffer "~5.2.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha1-nibGPTD1NEPpSJSVshBdN7Z6hdk= + dependencies: + ansi-regex "^5.0.1" + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/strip-final-newline/download/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0= + +strip-json-comments@3.1.1: + version "3.1.1" + resolved "https://registry.npmmirror.com/strip-json-comments/download/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY= + +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.npmmirror.com/supports-color/download/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha1-zW/BfihQDP9WwbhsCn/UpUpzAFw= + dependencies: + has-flag "^4.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmmirror.com/supports-color/download/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha1-G33NyzK4E4gBs+R4umpRyqiWSNo= + dependencies: + has-flag "^4.0.0" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.npmmirror.com/through/download/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npmmirror.com/tmp/download/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha1-bTQzWIl2jSGyvNoKonfO07G/rfk= + dependencies: + os-tmpdir "~1.0.2" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/to-regex-range/download/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ= + dependencies: + is-number "^7.0.0" + +tree-kill@^1.2.2: + version "1.2.2" + resolved "https://registry.npmmirror.com/tree-kill/download/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha1-TKCakJLIi3OnzcXooBtQeweQoMw= + +ts-node@^10.4.0: + version "10.4.0" + resolved "https://registry.npmmirror.com/ts-node/download/ts-node-10.4.0.tgz#680f88945885f4e6cf450e7f0d6223dd404895f7" + integrity sha1-aA+IlFiF9ObPRQ5/DWIj3UBIlfc= + dependencies: + "@cspotcode/source-map-support" "0.7.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + yn "3.1.1" + +tsbuffer-proto-generator@^1.6.0: + version "1.6.0" + resolved "https://registry.npmmirror.com/tsbuffer-proto-generator/download/tsbuffer-proto-generator-1.6.0.tgz#c8708cb47e30bbd083f9d47a9444e40c9cc1a63d" + integrity sha512-sjP9Qo8RbBYjkM78yzfoES/mJa3KH+UHPJ2UJ4MYOH0RuCZoYL27Wbtb7So4axLZKi4PoULRuUf8DV1bBjfBEQ== + dependencies: + k8w-crypto "^0.2.0" + k8w-extend-native "^1.4.6" + tsbuffer-schema "^2.1.1" + tslib "^2.3.1" + typescript "^4.5.4" + +tsbuffer-schema@^2.0.8, tsbuffer-schema@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/tsbuffer-schema/download/tsbuffer-schema-2.1.1.tgz#638a05f728a8ec5c0ed036e126f4f5b350f86cb9" + integrity sha512-c76TmiIJKHTdkByAXsLZ+Oin85y41CBOiGfrrPtBOTxh2pg80bN8wpF79N4teZA/B/u6SF47tsq2XR9Ef8/6kA== + +tsbuffer-validator@^2.0.7: + version "2.0.7" + resolved "https://registry.npmmirror.com/tsbuffer-validator/download/tsbuffer-validator-2.0.7.tgz#733a1d3074437af13acf8c26b6df0c703940d7f5" + integrity sha512-iffKO4LmbZ1l7SZsQB5oRXl58xKqwuGFEUzWzKvwT4ambLaI2jLICVTBmBIYJDrF5hI0ZJm282YmRi4QleR7SA== + dependencies: + k8w-extend-native "^1.4.6" + tsbuffer-schema "^2.0.8" + tslib "^2.3.1" + +tsbuffer@^2.1.5: + version "2.1.5" + resolved "https://registry.npmmirror.com/tsbuffer/download/tsbuffer-2.1.5.tgz#1bdb44ece499685a836564b3f087b261c0e2112c" + integrity sha512-xlZjiz7LgteL66orgYKn4FTBadPyEwkUrdSYztGDNcLV9Hlp8tIK3/4vhDYkHqa9n/usX8beCrp6atRwfwVDnw== + dependencies: + k8w-extend-native "^1.4.6" + tsbuffer-validator "^2.0.7" + tslib "^2.3.1" + +tslib@*, tslib@^2.3.1: + version "2.3.1" + resolved "https://registry.npmmirror.com/tslib/download/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha1-6KM1rdXOrlGqJh0ypJAVjvBC7wE= + +tslib@~2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/tslib/download/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" + integrity sha1-2mCGDxwuyqVwOrfTm8Bba/mIuXo= + +tsrpc-base-client@^1.2.4: + version "1.2.4" + resolved "https://registry.npmmirror.com/tsrpc-base-client/download/tsrpc-base-client-1.2.4.tgz#f418c6590c646dd120c7da65f7133690ce0c0693" + integrity sha512-Z/Npf0Yzj2qtjnJAlYZKseRZx25HvZ9wagzmGnioUEXvUHsD7WD7njyks8MDlyVyKezRkLsXIlehcW7uNVmeXQ== + dependencies: + k8w-extend-native "^1.4.6" + tsbuffer "^2.1.5" + tslib "^2.3.1" + tsrpc-proto "^1.3.10" + +tsrpc-cli@^2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/tsrpc-cli/download/tsrpc-cli-2.3.0.tgz#b0218ddaf82f871a30cb2518cfbad6f3a44a86c1" + integrity sha512-NDJ7caHaDEN6l/U8z+9fJFPpsRvloKChYbxc6ZB6j8TKLhkgiDR0T1kjyUe1yFyWICRkpKGg/GXMrkOV+NdcNw== + dependencies: + chalk "^4.1.2" + chokidar "^3.5.2" + fs-extra "^10.0.0" + glob "^7.2.0" + inquirer "^8.2.0" + k8w-extend-native "^1.4.6" + minimist "^1.2.5" + node-json-color-stringify "^1.1.0" + ora "^5.4.1" + os-locale "^5.0.0" + ts-node "^10.4.0" + tsbuffer "^2.1.5" + tsbuffer-proto-generator "^1.6.0" + tsbuffer-schema "^2.1.1" + tsrpc-proto "^1.3.10" + typescript "^4.5.4" + typescript-formatter "^7.2.2" + +tsrpc-proto@^1.3.10: + version "1.3.10" + resolved "https://registry.npmmirror.com/tsrpc-proto/download/tsrpc-proto-1.3.10.tgz#4a748546a0500362235a1469017e36f3f6a259b2" + integrity sha512-YavKKcOMSs80ev44gqHpSx6Z7UFQYmxItDTuaktiKQmstRbW9D/qK1b0lJltAj4ihPU06OOXePcg0CGEch6kYQ== + dependencies: + tsbuffer-schema "^2.1.1" + tslib "*" + +tsrpc@^3.1.4: + version "3.1.4" + resolved "https://registry.npmmirror.com/tsrpc/download/tsrpc-3.1.4.tgz#9dd3d2db94e7be0b7fb22fa566ca7e23edef4135" + integrity sha512-LNzU8E46QJAWINf6rlyvgLgxvd3x976No4nPq9lLkZd2MH1ecP9L1KJDT2eiehDHcmFzFNRGqNjzOyh5teviaw== + dependencies: + "@types/ws" "^7.4.7" + bson "*" + chalk "^4.1.2" + tsbuffer "^2.1.5" + tsrpc-base-client "^1.2.4" + tsrpc-proto "^1.3.10" + uuid "^8.3.2" + ws "^7.5.6" + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.npmmirror.com/type-fest/download/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha1-0mCiSwGYQ24TP6JqUkptZfo7Ljc= + +typescript-formatter@^7.2.2: + version "7.2.2" + resolved "https://registry.npmmirror.com/typescript-formatter/download/typescript-formatter-7.2.2.tgz#a147181839b7bb09c2377b072f20f6336547c00a" + integrity sha1-oUcYGDm3uwnCN3sHLyD2M2VHwAo= + dependencies: + commandpost "^1.0.0" + editorconfig "^0.15.0" + +typescript@^4.5.4: + version "4.5.4" + resolved "https://registry.npmmirror.com/typescript/download/typescript-4.5.4.tgz#a17d3a0263bf5c8723b9c52f43c5084edf13c2e8" + integrity sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/universalify/download/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha1-daSYTv7cSwiXXFrrc/Uw0C3yVxc= + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.npmmirror.com/util-deprecate/download/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.npmmirror.com/uuid/download/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/wcwidth/download/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +which@2.0.2, which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmmirror.com/which/download/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE= + dependencies: + isexe "^2.0.0" + +workerpool@6.1.5: + version "6.1.5" + resolved "https://registry.npmmirror.com/workerpool/download/workerpool-6.1.5.tgz#0f7cf076b6215fd7e1da903ff6f22ddd1886b581" + integrity sha1-D3zwdrYhX9fh2pA/9vIt3RiGtYE= + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/wrap-ansi/download/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM= + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmmirror.com/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +ws@^7.5.6: + version "7.5.6" + resolved "https://registry.npmmirror.com/ws/download/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b" + integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.npmmirror.com/y18n/download/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha1-f0k00PfKjFb5UxSTndzS3ZHOHVU= + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.npmmirror.com/yallist/download/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.npmmirror.com/yargs-parser/download/yargs-parser-20.2.4.tgz?cache=0&sync_timestamp=1637031026741&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha1-tCiQ8UVmeW+Fro46JSkNIF8VSlQ= + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.npmmirror.com/yargs-parser/download/yargs-parser-20.2.9.tgz?cache=0&sync_timestamp=1637031026741&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha1-LrfcOwKJcY/ClfNidThFxBoMlO4= + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/yargs-unparser/download/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha1-8TH5ImkRrl2a04xDL+gJNmwjJes= + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0: + version "16.2.0" + resolved "https://registry.npmmirror.com/yargs/download/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha1-HIK/D2tqZur85+8w43b0mhJHf2Y= + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.npmmirror.com/yn/download/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha1-HodAGgnXZ8HV6rJqbkwYUYLS61A= + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/yocto-queue/download/yocto-queue-0.1.0.tgz?cache=0&sync_timestamp=1632753523520&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fyocto-queue%2Fdownload%2Fyocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha1-ApTrPe4FAo0x7hpfosVWpqrxChs= diff --git a/examples/serverless-faas/frontend/.gitignore b/examples/serverless-faas/frontend/.gitignore new file mode 100644 index 0000000..ae16b5a --- /dev/null +++ b/examples/serverless-faas/frontend/.gitignore @@ -0,0 +1,3 @@ +.DS_STORE +node_modules +dist \ No newline at end of file diff --git a/examples/serverless-faas/frontend/package.json b/examples/serverless-faas/frontend/package.json new file mode 100644 index 0000000..f0a25fa --- /dev/null +++ b/examples/serverless-faas/frontend/package.json @@ -0,0 +1,24 @@ +{ + "name": "serverless-faas-frontend", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "webpack serve --mode=development --open", + "build": "webpack --mode=production" + }, + "devDependencies": { + "copy-webpack-plugin": "^9.1.0", + "html-webpack-plugin": "^5.5.0", + "ts-loader": "^9.2.6", + "typescript": "^4.5.4", + "webpack": "^5.65.0", + "webpack-cli": "^4.9.1", + "webpack-dev-server": "^3.11.3" + }, + "dependencies": { + "tsrpc-browser": "^3.1.4" + }, + "browserslist": [ + "defaults" + ] +} \ No newline at end of file diff --git a/examples/serverless-faas/frontend/public/favicon.ico b/examples/serverless-faas/frontend/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..361535cb26507b388a0341c772f36f536f7f24be GIT binary patch literal 4286 zcmb`JYfMvT7{`xu*%o7_S(be;%k;yNxy6uW$;{@Q;3W*Npl%Az#Tkv;2t(%_UJ)n- zLBtGi(=aXq1r@mq=)6#Y&^rf!!XQb6do}FC_3j}_?fS->RR=f|||sH&}>Tu@$RAvP&NzQZGb{STp#5Wf`;{IL&mjva@i`2~=k zmF1Kyemg9f?YF@jKGuBviOMq?o=t0f+!hyp`05adjot`p`}RPVA`fzppMdo2Y$s31 zrhRnuCRjS}GcD%e6;B?jmFicEPM@n5vU&ctsBlP4O@u$QGcl(pA>(L{B=1H3=BNk= z3kiUE0Ut^B0rgwy*_xE2Cri1U6F0xC3NBvP!HxT7s8p)F<_Y;3Ik~VtVil}hItLa9 zeOe+FfBE^kmAS>`9GiOnOnoEV?yy2@4}jim1KkrVC>yUqR$iV@KByPgtzOFUmoJ=d z#~Qr%qK8W5rKyV2N-M=&a#jh=ZI8gv&2ns7_2y@sS~{P?zj`C&7nOMJfok>LvOtdi z?ULEBXwJt8LO%A}gku$_+Y8F8q5h^G^p-)6OL3EgeBOt~)CCpimFPjb=lB}r7Zt;@ zh0{4c)!^&-pPMiTukjvA|Ef`+z1#%aNBu6`VZOr|KhLLC_oN@{nr>h{6drStm9K#1 zi@tR7S1g_d^Jh*8<@wjzJDs`anZni3HRzU49;hBoh6hkkQYPu)a7H?W2Kzhtl!GO6 zr>cSiKHw|}S?>0Fi(Qh>=R@3}E#?8l1E9GFpEWZe2KWw<$ z_k7k|*b=iR&9@1id<)+9>5&zL=U3* z_cVJ#j?3O+gIgWF(AfG2)d72xlOQD_UZmY}nGH3a<6Gfv%tQCR7wTZ>8hQ3OHpZ#L z-n(kFz~ws+p#HXzlj^Eg#O1um(T`mABeD4x<{$+HZN0;J7;*N7V!eW~@=W1cRikpt z$GFo|WHKJjt;n8$Ie03pgC4K%l3RKXVXSvL`!QBC#(Li^mprJoMkpveDdHnrjj_A^ zzZpFop&Z~$VlNCo_xK#&eAok53>}h8VeIt1gZuZn^5rrUvfp(HT<`|j?_&<^{3Y4 zxzWm2^xB{E$%E4eZd#u7K|_mYALKJLGn3q? z&O}|4hS+p}n<2$`nRE0o7Ln8JEE|dYT=b|x*{y>t+_m&OXS4ErEg(DmWf;Ex4f=Q! zH3PK~>r!AaTeYW^s*IF)@A?gP0cLw5iiu$v#(xm?jA15rq1qT`97)MAug9X8=NgSG mX%w$m+>n%bh8j(3!|$TT(REOCO;QYAA0T!Vz~E>Ex5Ix+)2V6z literal 0 HcmV?d00001 diff --git a/examples/serverless-faas/frontend/public/index.css b/examples/serverless-faas/frontend/public/index.css new file mode 100644 index 0000000..bdef476 --- /dev/null +++ b/examples/serverless-faas/frontend/public/index.css @@ -0,0 +1,83 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + text-align: center; +} + +body>* { + margin: 20px auto; +} + +.send, +.list { + width: 370px; +} + +.send>* { + display: block; + width: 100%; + margin: 10px auto; + padding: 10px; + border-radius: 5px; + font-size: 16px; + border: none; + outline: none; +} + +.send>textarea { + height: 80px; + background: #f7f7f7; + border: #eeeeee 1px solid; +} + +.send>textarea:focus { + background: #fff; + border-color: #ccc; +} + +.send>button { + background: #215fa4; + color: white; + cursor: pointer; +} + +.send>button:hover { + background: #4b80bb; +} + +.list { + list-style: none; + border-radius: 5px; + padding: 10px; + background: #f2f2f2; +} + +.list>li { + margin-bottom: 10px; + padding: 10px; + background: #fff; + line-height: 1.5em; + border-radius: 5px; +} + +.list>li>.content { + font-size: 14px; + text-align: left; + white-space: pre-wrap; + word-wrap: break-word; +} + +.list>li>.time { + font-size: 12px; + color: #4b80bb; + text-align: right; +} + +.list>li:last-child { + border-bottom: none; + margin-bottom: 0; +} \ No newline at end of file diff --git a/examples/serverless-faas/frontend/public/index.html b/examples/serverless-faas/frontend/public/index.html new file mode 100644 index 0000000..0f9e027 --- /dev/null +++ b/examples/serverless-faas/frontend/public/index.html @@ -0,0 +1,29 @@ + + + + + + + + + TSRPC Browser + + + + +

TSRPC Guestbook

+ +
+ + +
+ +
    + +
+ + + \ No newline at end of file diff --git a/examples/serverless-faas/frontend/src/client.ts b/examples/serverless-faas/frontend/src/client.ts new file mode 100644 index 0000000..e387f38 --- /dev/null +++ b/examples/serverless-faas/frontend/src/client.ts @@ -0,0 +1,10 @@ +import { HttpClient } from "tsrpc-browser"; +import { serviceProto } from "./shared/protocols/serviceProto"; + +// Create Client +export const client = new HttpClient(serviceProto, { + server: "https://service-23pfz6cm-1253954497.gz.apigw.tencentcs.com/release/helloworld-1634897828/", + // Remove this to use binary mode (remove from the server too) + json: true, + logger: console, +}); \ No newline at end of file diff --git a/examples/serverless-faas/frontend/src/env.d.ts b/examples/serverless-faas/frontend/src/env.d.ts new file mode 100644 index 0000000..95a50dc --- /dev/null +++ b/examples/serverless-faas/frontend/src/env.d.ts @@ -0,0 +1,9 @@ +// TSRPC would decode ObjectId as string in frontend. +declare module 'mongodb' { + export type ObjectId = string; + export type ObjectID = string; +} +declare module 'bson' { + export type ObjectId = string; + export type ObjectID = string; +} \ No newline at end of file diff --git a/examples/serverless-faas/frontend/src/index.ts b/examples/serverless-faas/frontend/src/index.ts new file mode 100644 index 0000000..bfb33e1 --- /dev/null +++ b/examples/serverless-faas/frontend/src/index.ts @@ -0,0 +1,50 @@ +import { client } from './client'; + +// This is a demo code file +// Feel free to modify or clear it + +// Reload message list +async function loadList() { + let ret = await client.callApi('GetData', {}); + + // Error + if (!ret.isSucc) { + alert(ret.err.message); + return; + } + + // Success + const list = document.querySelector('.list')!; + list.innerHTML = ''; + ret.res.data.forEach(v => { + let li = document.createElement('li'); + li.innerHTML = `
`; + (li.querySelector('.content') as HTMLDivElement).innerText = v.content; + (li.querySelector('.time') as HTMLDivElement).innerText = v.time.toLocaleTimeString(); + list.appendChild(li); + }) +} + +// Send Message +async function send() { + const textarea = document.querySelector('.send>textarea') as HTMLTextAreaElement; + let ret = await client.callApi('AddData', { + content: textarea.value + }); + + // Error + if (!ret.isSucc) { + alert(ret.err.message); + return; + } + + // Success + textarea.value = ''; + loadList(); +} + +// Bind Events +(document.querySelector('.send>button') as HTMLButtonElement).onclick = send; + +// Load list after page load +loadList(); \ No newline at end of file diff --git a/examples/serverless-faas/frontend/src/shared b/examples/serverless-faas/frontend/src/shared new file mode 120000 index 0000000..6c36ac1 --- /dev/null +++ b/examples/serverless-faas/frontend/src/shared @@ -0,0 +1 @@ +E:/Projects/tsrpc-examples/examples/serverless-faas/backend/src/shared \ No newline at end of file diff --git a/examples/serverless-faas/frontend/tsconfig.json b/examples/serverless-faas/frontend/tsconfig.json new file mode 100644 index 0000000..f7f1d7c --- /dev/null +++ b/examples/serverless-faas/frontend/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "lib": [ + "dom", + "es2015" + ], + "module": "esnext", + "target": "es5", + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "moduleResolution": "node", + "outDir": "dist", + "skipLibCheck": true, + "strict": true, + "jsx": "react-jsx", + "sourceMap": true, + "isolatedModules": true + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/examples/serverless-faas/frontend/webpack.config.js b/examples/serverless-faas/frontend/webpack.config.js new file mode 100644 index 0000000..b0d3703 --- /dev/null +++ b/examples/serverless-faas/frontend/webpack.config.js @@ -0,0 +1,56 @@ +const webpack = require('webpack'); +const path = require('path'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const CopyWebpackPlugin = require('copy-webpack-plugin'); + +const isProduction = process.argv.indexOf('--mode=production') > -1; + +module.exports = { + entry: './src/index.ts', + output: { + filename: 'bundle.[contenthash].js', + path: path.resolve(__dirname, 'dist'), + clean: true + }, + resolve: { + extensions: ['.ts', '.tsx', '.js', '.mjs', '.cjs'] + }, + module: { + rules: [ + { + test: /\.tsx?$/, + use: [{ + loader: 'ts-loader', + options: { + // Compile to ES5 in production mode for better compatibility + // Compile to ES2018 in development for better debugging (like async/await) + compilerOptions: !isProduction ? { + "target": "es2018", + } : undefined + } + }], + exclude: /node_modules/ + }, + ] + }, + plugins: [ + // Copy "public" to "dist" + new CopyWebpackPlugin({ + patterns: [{ + from: 'public', + to: '.', + toType: 'dir', + globOptions: { + gitignore: true, + ignore: [path.resolve(__dirname, 'public/index.html').replace(/\\/g, '/')] + }, + noErrorOnMissing: true + }] + }), + // Auto add