From 6b0a43c8857c495b5036c378c7b801ea97bc197e Mon Sep 17 00:00:00 2001 From: neil Date: Mon, 17 Oct 2022 20:17:13 +0800 Subject: [PATCH 01/37] test init sls lambdas --- .github/workflows/staging.yml | 10 + README.md | 3 +- lambdas/.gitignore | 9 + lambdas/.nvmrc | 1 + lambdas/README.md | 90 + lambdas/package.json | 30 + lambdas/serverless.ts | 38 + lambdas/src/functions/hello/handler.ts | 14 + lambdas/src/functions/hello/index.ts | 19 + lambdas/src/functions/hello/mock.json | 6 + lambdas/src/functions/hello/schema.ts | 7 + lambdas/src/functions/index.ts | 1 + lambdas/src/libs/api-gateway.ts | 12 + lambdas/src/libs/handler-resolver.ts | 3 + lambdas/src/libs/lambda.ts | 6 + lambdas/tsconfig.json | 24 + lambdas/tsconfig.paths.json | 9 + lambdas/yarn.lock | 3472 ++++++++++++++++++++++++ 18 files changed, 3753 insertions(+), 1 deletion(-) create mode 100644 lambdas/.gitignore create mode 100644 lambdas/.nvmrc create mode 100644 lambdas/README.md create mode 100644 lambdas/package.json create mode 100644 lambdas/serverless.ts create mode 100644 lambdas/src/functions/hello/handler.ts create mode 100644 lambdas/src/functions/hello/index.ts create mode 100644 lambdas/src/functions/hello/mock.json create mode 100644 lambdas/src/functions/hello/schema.ts create mode 100644 lambdas/src/functions/index.ts create mode 100644 lambdas/src/libs/api-gateway.ts create mode 100644 lambdas/src/libs/handler-resolver.ts create mode 100644 lambdas/src/libs/lambda.ts create mode 100644 lambdas/tsconfig.json create mode 100644 lambdas/tsconfig.paths.json create mode 100644 lambdas/yarn.lock diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index 11d2a61..a79a87f 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -78,7 +78,17 @@ jobs: id: cdk_deploy run: yarn deploy working-directory: .cdk + + - uses: borales/actions-yarn@v3.0.0 + with: + cmd: install + working-directory: lambdas + - name: deploy + uses: Teakowa/serverless-action@master + with: + args: --stage prod deploy + - name: Seal Deployment uses: bobheadxi/deployments@v1 if: always() diff --git a/README.md b/README.md index b7aa64d..6ad9526 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,8 @@ The tea logo and wordmark are registered trademarks of tea.inc. * Repeated components are in [`./src/layouts/partials/`]. ## Getting Started -Just once assuming there are no updates in `/src/data/packages.json`. This will create the package detail pages. +The detail pages of each package are not committed to the repository for the simple reason of that would be too much to much repeating data. +Execute the following command just once per version of `/src/data/packages.json`. This will create the package detail pages in `/src/content/packages/[package_slug].md`. ```sh .github/build-package-pages.sh src/data/packages.json src/content/packages ``` diff --git a/lambdas/.gitignore b/lambdas/.gitignore new file mode 100644 index 0000000..167a9a7 --- /dev/null +++ b/lambdas/.gitignore @@ -0,0 +1,9 @@ +# package directories +node_modules +jspm_packages + +# Serverless directories +.serverless + +# esbuild directories +.esbuild \ No newline at end of file diff --git a/lambdas/.nvmrc b/lambdas/.nvmrc new file mode 100644 index 0000000..518633e --- /dev/null +++ b/lambdas/.nvmrc @@ -0,0 +1 @@ +lts/fermium diff --git a/lambdas/README.md b/lambdas/README.md new file mode 100644 index 0000000..2d75949 --- /dev/null +++ b/lambdas/README.md @@ -0,0 +1,90 @@ +# Serverless - AWS Node.js Typescript + +This project has been generated using the `aws-nodejs-typescript` template from the [Serverless framework](https://www.serverless.com/). + +For detailed instructions, please refer to the [documentation](https://www.serverless.com/framework/docs/providers/aws/). + +## Installation/deployment instructions + +Depending on your preferred package manager, follow the instructions below to deploy your project. + +> **Requirements**: NodeJS `lts/fermium (v.14.15.0)`. If you're using [nvm](https://github.com/nvm-sh/nvm), run `nvm use` to ensure you're using the same Node version in local and in your lambda's runtime. + +### Using Yarn + +- Run `yarn` to install the project dependencies +- Run `yarn sls deploy` to deploy this stack to AWS + +## Test your service + +This template contains a single lambda function triggered by an HTTP request made on the provisioned API Gateway REST API `/hello` route with `POST` method. The request body must be provided as `application/json`. The body structure is tested by API Gateway against `src/functions/hello/schema.ts` JSON-Schema definition: it must contain the `name` property. + +- requesting any other path than `/hello` with any other method than `POST` will result in API Gateway returning a `403` HTTP error code +- sending a `POST` request to `/hello` with a payload **not** containing a string property named `name` will result in API Gateway returning a `400` HTTP error code +- sending a `POST` request to `/hello` with a payload containing a string property named `name` will result in API Gateway returning a `200` HTTP status code with a message saluting the provided name and the detailed event processed by the lambda + +> :warning: As is, this template, once deployed, opens a **public** endpoint within your AWS account resources. Anybody with the URL can actively execute the API Gateway endpoint and the corresponding lambda. You should protect this endpoint with the authentication method of your choice. + +### Locally + +In order to test the hello function locally, run the following command: + +- `npx sls invoke local -f hello --path src/functions/hello/mock.json` if you're using NPM +- `yarn sls invoke local -f hello --path src/functions/hello/mock.json` if you're using Yarn + +Check the [sls invoke local command documentation](https://www.serverless.com/framework/docs/providers/aws/cli-reference/invoke-local/) for more information. + +### Remotely + +Copy and replace your `url` - found in Serverless `deploy` command output - and `name` parameter in the following `curl` command in your terminal or in Postman to test your newly deployed application. + +``` +curl --location --request POST 'https://myApiEndpoint/dev/hello' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "name": "Frederic" +}' +``` + +## Template features + +### Project structure + +The project code base is mainly located within the `src` folder. This folder is divided in: + +- `functions` - containing code base and configuration for your lambda functions +- `libs` - containing shared code base between your lambdas + +``` +. +├── src +│ ├── functions # Lambda configuration and source code folder +│ │ ├── hello +│ │ │ ├── handler.ts # `Hello` lambda source code +│ │ │ ├── index.ts # `Hello` lambda Serverless configuration +│ │ │ ├── mock.json # `Hello` lambda input parameter, if any, for local invocation +│ │ │ └── schema.ts # `Hello` lambda input event JSON-Schema +│ │ │ +│ │ └── index.ts # Import/export of all lambda configurations +│ │ +│ └── libs # Lambda shared code +│ └── apiGateway.ts # API Gateway specific helpers +│ └── handlerResolver.ts # Sharable library for resolving lambda handlers +│ └── lambda.ts # Lambda middleware +│ +├── package.json +├── serverless.ts # Serverless service file +├── tsconfig.json # Typescript compiler configuration +├── tsconfig.paths.json # Typescript paths +└── webpack.config.js # Webpack configuration +``` + +### 3rd party libraries + +- [json-schema-to-ts](https://github.com/ThomasAribart/json-schema-to-ts) - uses JSON-Schema definitions used by API Gateway for HTTP request validation to statically generate TypeScript types in your lambda's handler code base +- [middy](https://github.com/middyjs/middy) - middleware engine for Node.Js lambda. This template uses [http-json-body-parser](https://github.com/middyjs/middy/tree/master/packages/http-json-body-parser) to convert API Gateway `event.body` property, originally passed as a stringified JSON, to its corresponding parsed object +- [@serverless/typescript](https://github.com/serverless/typescript) - provides up-to-date TypeScript definitions for your `serverless.ts` service file + +### Advanced usage + +Any tsconfig.json can be used, but if you do, set the environment variable `TS_NODE_CONFIG` for building the application, eg `TS_NODE_CONFIG=./tsconfig.app.json npx serverless webpack` diff --git a/lambdas/package.json b/lambdas/package.json new file mode 100644 index 0000000..43d554b --- /dev/null +++ b/lambdas/package.json @@ -0,0 +1,30 @@ +{ + "name": "lambdas", + "version": "1.0.0", + "description": "Serverless aws-nodejs-typescript template", + "main": "serverless.ts", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "engines": { + "node": ">=14.15.0" + }, + "dependencies": { + "@middy/core": "^3.4.0", + "@middy/http-json-body-parser": "^3.4.0" + }, + "devDependencies": { + "@serverless/typescript": "^3.0.0", + "@types/aws-lambda": "^8.10.71", + "@types/node": "^14.14.25", + "esbuild": "^0.14.11", + "json-schema-to-ts": "^1.5.0", + "serverless": "^3.0.0", + "serverless-esbuild": "^1.23.3", + "ts-node": "^10.4.0", + "tsconfig-paths": "^3.9.0", + "typescript": "^4.1.3" + }, + "author": "The serverless webpack authors (https://github.com/elastic-coders/serverless-webpack)", + "license": "MIT" +} \ No newline at end of file diff --git a/lambdas/serverless.ts b/lambdas/serverless.ts new file mode 100644 index 0000000..a8e7fdc --- /dev/null +++ b/lambdas/serverless.ts @@ -0,0 +1,38 @@ +import type { AWS } from '@serverless/typescript'; + +import hello from '@functions/hello'; + +const serverlessConfiguration: AWS = { + service: 'lambdas', + frameworkVersion: '3', + plugins: ['serverless-esbuild'], + provider: { + name: 'aws', + runtime: 'nodejs14.x', + apiGateway: { + minimumCompressionSize: 1024, + shouldStartNameWithService: true, + }, + environment: { + AWS_NODEJS_CONNECTION_REUSE_ENABLED: '1', + NODE_OPTIONS: '--enable-source-maps --stack-trace-limit=1000', + }, + }, + // import the function via paths + functions: { hello }, + package: { individually: true }, + custom: { + esbuild: { + bundle: true, + minify: false, + sourcemap: true, + exclude: ['aws-sdk'], + target: 'node14', + define: { 'require.resolve': undefined }, + platform: 'node', + concurrency: 10, + }, + }, +}; + +module.exports = serverlessConfiguration; diff --git a/lambdas/src/functions/hello/handler.ts b/lambdas/src/functions/hello/handler.ts new file mode 100644 index 0000000..1236d25 --- /dev/null +++ b/lambdas/src/functions/hello/handler.ts @@ -0,0 +1,14 @@ +import type { ValidatedEventAPIGatewayProxyEvent } from '@libs/api-gateway'; +import { formatJSONResponse } from '@libs/api-gateway'; +import { middyfy } from '@libs/lambda'; + +import schema from './schema'; + +const hello: ValidatedEventAPIGatewayProxyEvent = async (event) => { + return formatJSONResponse({ + message: `Hello ${event.body.name}, welcome to the exciting Serverless world!`, + event, + }); +}; + +export const main = middyfy(hello); diff --git a/lambdas/src/functions/hello/index.ts b/lambdas/src/functions/hello/index.ts new file mode 100644 index 0000000..d9f4d47 --- /dev/null +++ b/lambdas/src/functions/hello/index.ts @@ -0,0 +1,19 @@ +import schema from './schema'; +import { handlerPath } from '@libs/handler-resolver'; + +export default { + handler: `${handlerPath(__dirname)}/handler.main`, + events: [ + { + http: { + method: 'post', + path: 'hello', + request: { + schemas: { + 'application/json': schema, + }, + }, + }, + }, + ], +}; diff --git a/lambdas/src/functions/hello/mock.json b/lambdas/src/functions/hello/mock.json new file mode 100644 index 0000000..6b1c818 --- /dev/null +++ b/lambdas/src/functions/hello/mock.json @@ -0,0 +1,6 @@ +{ + "headers": { + "Content-Type": "application/json" + }, + "body": "{\"name\": \"Frederic\"}" +} diff --git a/lambdas/src/functions/hello/schema.ts b/lambdas/src/functions/hello/schema.ts new file mode 100644 index 0000000..1ab6f41 --- /dev/null +++ b/lambdas/src/functions/hello/schema.ts @@ -0,0 +1,7 @@ +export default { + type: "object", + properties: { + name: { type: 'string' } + }, + required: ['name'] +} as const; diff --git a/lambdas/src/functions/index.ts b/lambdas/src/functions/index.ts new file mode 100644 index 0000000..109c3d4 --- /dev/null +++ b/lambdas/src/functions/index.ts @@ -0,0 +1 @@ +export { default as hello } from './hello'; diff --git a/lambdas/src/libs/api-gateway.ts b/lambdas/src/libs/api-gateway.ts new file mode 100644 index 0000000..ee7370c --- /dev/null +++ b/lambdas/src/libs/api-gateway.ts @@ -0,0 +1,12 @@ +import type { APIGatewayProxyEvent, APIGatewayProxyResult, Handler } from "aws-lambda" +import type { FromSchema } from "json-schema-to-ts"; + +type ValidatedAPIGatewayProxyEvent = Omit & { body: FromSchema } +export type ValidatedEventAPIGatewayProxyEvent = Handler, APIGatewayProxyResult> + +export const formatJSONResponse = (response: Record) => { + return { + statusCode: 200, + body: JSON.stringify(response) + } +} diff --git a/lambdas/src/libs/handler-resolver.ts b/lambdas/src/libs/handler-resolver.ts new file mode 100644 index 0000000..e333b9c --- /dev/null +++ b/lambdas/src/libs/handler-resolver.ts @@ -0,0 +1,3 @@ +export const handlerPath = (context: string) => { + return `${context.split(process.cwd())[1].substring(1).replace(/\\/g, '/')}` +}; diff --git a/lambdas/src/libs/lambda.ts b/lambdas/src/libs/lambda.ts new file mode 100644 index 0000000..ecb17fb --- /dev/null +++ b/lambdas/src/libs/lambda.ts @@ -0,0 +1,6 @@ +import middy from "@middy/core" +import middyJsonBodyParser from "@middy/http-json-body-parser" + +export const middyfy = (handler) => { + return middy(handler).use(middyJsonBodyParser()) +} diff --git a/lambdas/tsconfig.json b/lambdas/tsconfig.json new file mode 100644 index 0000000..896f946 --- /dev/null +++ b/lambdas/tsconfig.json @@ -0,0 +1,24 @@ +{ + "extends": "./tsconfig.paths.json", + "compilerOptions": { + "lib": ["ESNext"], + "moduleResolution": "node", + "noUnusedLocals": true, + "noUnusedParameters": true, + "removeComments": true, + "sourceMap": true, + "target": "ES2020", + "outDir": "lib" + }, + "include": ["src/**/*.ts", "serverless.ts"], + "exclude": [ + "node_modules/**/*", + ".serverless/**/*", + ".webpack/**/*", + "_warmup/**/*", + ".vscode/**/*" + ], + "ts-node": { + "require": ["tsconfig-paths/register"] + } +} diff --git a/lambdas/tsconfig.paths.json b/lambdas/tsconfig.paths.json new file mode 100644 index 0000000..2e66463 --- /dev/null +++ b/lambdas/tsconfig.paths.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@functions/*": ["src/functions/*"], + "@libs/*": ["src/libs/*"] + } + } +} diff --git a/lambdas/yarn.lock b/lambdas/yarn.lock new file mode 100644 index 0000000..d2f8a7b --- /dev/null +++ b/lambdas/yarn.lock @@ -0,0 +1,3472 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"2-thenable@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/2-thenable/-/2-thenable-1.0.0.tgz#56e9a2e363293b1e507f501aac1aa9927670b2fc" + integrity sha512-HqiDzaLDFCXkcCO/SwoyhRwqYtINFHF7t9BDRq4x90TOKNAJpiqUt9X5lQ08bwxYzc067HUywDjGySpebHcUpw== + dependencies: + d "1" + es5-ext "^0.10.47" + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@esbuild/linux-loong64@0.14.54": + version "0.14.54" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" + integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw== + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@kwsites/file-exists@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@kwsites/file-exists/-/file-exists-1.1.1.tgz#ad1efcac13e1987d8dbaf235ef3be5b0d96faa99" + integrity sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw== + dependencies: + debug "^4.1.1" + +"@kwsites/promise-deferred@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz#8ace5259254426ccef57f3175bc64ed7095ed919" + integrity sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw== + +"@middy/core@^3.4.0": + version "3.6.1" + resolved "https://registry.yarnpkg.com/@middy/core/-/core-3.6.1.tgz#336f8e43a78bf37d37d26a79a6756e769c5a63d4" + integrity sha512-nxVJxLlrRkSpodNG2VBLQvPD2L0gZsS5sg32Vz9TZpyQIe98xHAaAnp6XQ2DcuF0UHpo7ZWqhIoOvVSrbGk7BA== + +"@middy/http-json-body-parser@^3.4.0": + version "3.6.1" + resolved "https://registry.yarnpkg.com/@middy/http-json-body-parser/-/http-json-body-parser-3.6.1.tgz#f60802b0408c502a9ac18a5b76f5cd5bb7a4896e" + integrity sha512-MkN1qHS/BdMvE9sS6uh9WG634QHfyjz28KYqJxNkEyazSlN61219/Y8RSHdnejoghGszpYjYHExhrPSNcTS2ew== + dependencies: + "@middy/util" "3.6.1" + +"@middy/util@3.6.1": + version "3.6.1" + resolved "https://registry.yarnpkg.com/@middy/util/-/util-3.6.1.tgz#8e7562d50dd7ef1dadc1098e23369fe269f4a1d5" + integrity sha512-gaTRf/3IMzXi6+8OfkzQs6iGCwhyB+CHe5zYe+HwA2Gd0vg1X6dp2U07/pwjgqC1XW4KS3FKhgGtl535I3eo2A== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@serverless/dashboard-plugin@^6.2.2": + version "6.2.2" + resolved "https://registry.yarnpkg.com/@serverless/dashboard-plugin/-/dashboard-plugin-6.2.2.tgz#1de497040d1b30d4abd7f4cdfdc40c84715200f4" + integrity sha512-h3zOprpuWZCdAP7qoOKT2nboB+AaxMkGoSzOD0jIBpt9s0cXqLE2VFjR2vKn8Cvam47Qa3XYnT2/XN6tR6rZgQ== + dependencies: + "@serverless/event-mocks" "^1.1.1" + "@serverless/platform-client" "^4.3.2" + "@serverless/utils" "^6.0.3" + child-process-ext "^2.1.1" + chokidar "^3.5.3" + flat "^5.0.2" + fs-extra "^9.1.0" + js-yaml "^4.1.0" + jszip "^3.9.1" + lodash "^4.17.21" + memoizee "^0.4.15" + ncjsm "^4.3.0" + node-dir "^0.1.17" + node-fetch "^2.6.7" + open "^7.4.2" + semver "^7.3.7" + simple-git "^3.7.0" + type "^2.6.0" + uuid "^8.3.2" + yamljs "^0.3.0" + +"@serverless/event-mocks@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@serverless/event-mocks/-/event-mocks-1.1.1.tgz#7064b99ccc29d9a8e9b799f413dbcfd64ea3b7ee" + integrity sha512-YAV5V/y+XIOfd+HEVeXfPWZb8C6QLruFk9tBivoX2roQLWVq145s4uxf8D0QioCueuRzkukHUS4JIj+KVoS34A== + dependencies: + "@types/lodash" "^4.14.123" + lodash "^4.17.11" + +"@serverless/platform-client@^4.3.2": + version "4.3.2" + resolved "https://registry.yarnpkg.com/@serverless/platform-client/-/platform-client-4.3.2.tgz#10cd3ad8cf452a33528cfb14bbb6003d30a74805" + integrity sha512-DAa5Z0JAZc6UfrTZLYwqoZxgAponZpFwaqd7WzzMA+loMCkYWyJNwxrAmV6cr2UUJpkko4toPZuJ3vM9Ie+NDA== + dependencies: + adm-zip "^0.5.5" + archiver "^5.3.0" + axios "^0.21.1" + fast-glob "^3.2.7" + https-proxy-agent "^5.0.0" + ignore "^5.1.8" + isomorphic-ws "^4.0.1" + js-yaml "^3.14.1" + jwt-decode "^2.2.0" + minimatch "^3.0.4" + querystring "^0.2.1" + run-parallel-limit "^1.1.0" + throat "^5.0.0" + traverse "^0.6.6" + ws "^7.5.3" + +"@serverless/typescript@^3.0.0": + version "3.21.0" + resolved "https://registry.yarnpkg.com/@serverless/typescript/-/typescript-3.21.0.tgz#f23969cd9c4c9afb0840400e4f53d89bca1a6e01" + integrity sha512-SiGqgBbE1npu4wMCKsN+sF5pH3RIsQvjvtzhnr6ZYuDDX1r1I1lVR0uLk12v2vAIywVUmKym7Z3cKUTc7NIioA== + +"@serverless/utils@^6.0.3", "@serverless/utils@^6.7.0": + version "6.8.0" + resolved "https://registry.yarnpkg.com/@serverless/utils/-/utils-6.8.0.tgz#5cd0141976cd312b40b56090ce2f52b575d0e658" + integrity sha512-qh1lh1Uo3hBylzqBLqJqJ7qeBcZQd6UIFULBJRz8IdPmDK1iiIO2fMV+bHQ8ZYgAfBnjJCMwwOMdSdV3KzFq1g== + dependencies: + archive-type "^4.0.0" + chalk "^4.1.2" + ci-info "^3.5.0" + cli-progress-footer "^2.3.2" + content-disposition "^0.5.4" + d "^1.0.1" + decompress "^4.2.1" + event-emitter "^0.3.5" + ext "^1.7.0" + ext-name "^5.0.0" + file-type "^16.5.4" + filenamify "^4.3.0" + get-stream "^6.0.1" + got "^11.8.5" + inquirer "^8.2.4" + js-yaml "^4.1.0" + jwt-decode "^3.1.2" + lodash "^4.17.21" + log "^6.3.1" + log-node "^8.0.3" + make-dir "^3.1.0" + memoizee "^0.4.15" + ncjsm "^4.3.1" + node-fetch "^2.6.7" + open "^8.4.0" + p-event "^4.2.0" + supports-color "^8.1.1" + timers-ext "^0.1.7" + type "^2.7.2" + uni-global "^1.0.0" + uuid "^8.3.2" + write-file-atomic "^4.0.2" + +"@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@tokenizer/token@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276" + integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + +"@types/aws-lambda@^8.10.71": + version "8.10.107" + resolved "https://registry.yarnpkg.com/@types/aws-lambda/-/aws-lambda-8.10.107.tgz#ef08cc6ceb63d786d58038dbe4f5412db68bc12d" + integrity sha512-UTI9ZPw4VzvgYUJ7gUU77/ovGrIniRRWiMWxms5dP+1fsxNPeP/cOopQ0mxXPc9NvbeROcDUDN34m8eEhdEitg== + +"@types/cacheable-request@^6.0.1": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.2.tgz#c324da0197de0a98a2312156536ae262429ff6b9" + integrity sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "*" + "@types/node" "*" + "@types/responselike" "*" + +"@types/http-cache-semantics@*": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" + integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== + +"@types/json-schema@^7.0.6": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/keyv@*": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + +"@types/lodash@^4.14.123": + version "4.14.186" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.186.tgz#862e5514dd7bd66ada6c70ee5fce844b06c8ee97" + integrity sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw== + +"@types/node@*": + version "18.11.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.0.tgz#f38c7139247a1d619f6cc6f27b072606af7c289d" + integrity sha512-IOXCvVRToe7e0ny7HpT/X9Rb2RYtElG1a+VshjwT00HxrM2dWBApHQoqsI6WiY7Q03vdf2bCrIGzVrkF/5t10w== + +"@types/node@^14.14.25": + version "14.18.32" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.32.tgz#8074f7106731f1a12ba993fe8bad86ee73905014" + integrity sha512-Y6S38pFr04yb13qqHf8uk1nHE3lXgQ30WZbv1mLliV9pt0NjvqdWttLcrOYLnXbOafknVYRHZGoMSpR9UwfYow== + +"@types/responselike@*", "@types/responselike@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" + integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + dependencies: + "@types/node" "*" + +acorn-walk@^8.1.1, acorn-walk@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.4.1, acorn@^8.7.1: + version "8.8.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + +adm-zip@^0.5.5: + version "0.5.9" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.5.9.tgz#b33691028333821c0cf95c31374c5462f2905a83" + integrity sha512-s+3fXLkeeLjZ2kLjCBwQufpI5fuN+kIGBxu6530nVQZGVol0d7Y/M88/xw9HGGUcJjKf8LutN3VPRUBq6N7Ajg== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv@^8.0.0, ajv@^8.11.0: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" + integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@^3.1.2, anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +archive-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/archive-type/-/archive-type-4.0.0.tgz#f92e72233056dfc6969472749c267bdb046b1d70" + integrity sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA== + dependencies: + file-type "^4.2.0" + +archiver-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" + integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== + dependencies: + glob "^7.1.4" + graceful-fs "^4.2.0" + lazystream "^1.0.0" + lodash.defaults "^4.2.0" + lodash.difference "^4.5.0" + lodash.flatten "^4.4.0" + lodash.isplainobject "^4.0.6" + lodash.union "^4.6.0" + normalize-path "^3.0.0" + readable-stream "^2.0.0" + +archiver@^5.3.0, archiver@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.1.tgz#21e92811d6f09ecfce649fbefefe8c79e57cbbb6" + integrity sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w== + dependencies: + archiver-utils "^2.1.0" + async "^3.2.3" + buffer-crc32 "^0.2.1" + readable-stream "^3.6.0" + readdir-glob "^1.0.0" + tar-stream "^2.2.0" + zip-stream "^4.1.0" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +asap@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +async@^3.2.0, async@^3.2.3: + version "3.2.4" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +aws-sdk@^2.1231.0: + version "2.1233.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1233.0.tgz#3386515966ca8a5baac048d986ad0977119c0765" + integrity sha512-e1GbVltsoQpWvx0gxQlEtKOdOrNWyjhD8bjFIMx/3Nwwzw4ac2KOy7CyC5I+lBj8el4AB0399umLHJZmL5WcVg== + dependencies: + buffer "4.9.2" + events "1.1.1" + ieee754 "1.1.13" + jmespath "0.16.0" + querystring "0.2.0" + sax "1.2.1" + url "0.10.3" + util "^0.12.4" + uuid "8.0.0" + xml2js "0.4.19" + +axios@^0.21.1: + version "0.21.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.0.2, base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bestzip@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/bestzip/-/bestzip-2.2.1.tgz#6f14c48e7abf57dfac60aecb45ee4571b77b37a7" + integrity sha512-XdAb87RXqOqF7C6UgQG9IqpEHJvS6IOUo0bXWEAebjSSdhDjsbcqFKdHpn5Q7QHz2pGr3Zmw4wgG3LlzdyDz7w== + dependencies: + archiver "^5.3.0" + async "^3.2.0" + glob "^7.1.6" + which "^2.0.2" + yargs "^16.2.0" + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bl@^1.0.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" + integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + +bl@^4.0.3, bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +bluebird@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-crc32@^0.2.1, buffer-crc32@^0.2.13, buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== + +buffer@4.9.2: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +buffer@^5.2.1, buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +builtin-modules@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-request@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" + integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +cachedir@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" + integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +child-process-ext@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/child-process-ext/-/child-process-ext-2.1.1.tgz#f7cf4e68fef60c4c8ee911e1b402413191467dc3" + integrity sha512-0UQ55f51JBkOFa+fvR76ywRzxiPwQS3Xe8oe5bZRphpv+dIMeerW5Zn5e4cUy4COJwVtJyU0R79RMnw+aCqmGA== + dependencies: + cross-spawn "^6.0.5" + es5-ext "^0.10.53" + log "^6.0.0" + split2 "^3.1.1" + stream-promise "^3.2.0" + +chokidar@^3.4.3, chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + 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" + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +ci-info@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.5.0.tgz#bfac2a29263de4c829d806b1ab478e35091e171f" + integrity sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-color@^2.0.1, cli-color@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-2.0.3.tgz#73769ba969080629670f3f2ef69a4bf4e7cc1879" + integrity sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ== + dependencies: + d "^1.0.1" + es5-ext "^0.10.61" + es6-iterator "^2.0.3" + memoizee "^0.4.15" + timers-ext "^0.1.7" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-progress-footer@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/cli-progress-footer/-/cli-progress-footer-2.3.2.tgz#1c13ba3c3dd894ef366f4a4f0620b3067284154d" + integrity sha512-uzHGgkKdeA9Kr57eyH1W5HGiNShP8fV1ETq04HDNM1Un6ShXbHhwi/H8LNV9L1fQXKjEw0q5FUkEVNuZ+yZdSw== + dependencies: + cli-color "^2.0.2" + d "^1.0.1" + es5-ext "^0.10.61" + mute-stream "0.0.8" + process-utils "^4.0.0" + timers-ext "^0.1.7" + type "^2.6.0" + +cli-spinners@^2.5.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" + integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== + +cli-sprintf-format@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/cli-sprintf-format/-/cli-sprintf-format-1.1.1.tgz#ec69955c89ef1c61243b52e68015b75c08fb9188" + integrity sha512-BbEjY9BEdA6wagVwTqPvmAwGB24U93rQPBFZUT8lNCDxXzre5LFHQUTJc70czjgUomVg8u8R5kW8oY9DYRFNeg== + dependencies: + cli-color "^2.0.1" + es5-ext "^0.10.53" + sprintf-kit "^2.0.1" + supports-color "^6.1.0" + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.8.1: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@~4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +component-emitter@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +compress-commons@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.1.1.tgz#df2a09a7ed17447642bad10a85cc9a19e5c42a7d" + integrity sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ== + dependencies: + buffer-crc32 "^0.2.13" + crc32-stream "^4.0.2" + normalize-path "^3.0.0" + readable-stream "^3.6.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +content-disposition@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +cookiejar@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" + integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +crc32-stream@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.2.tgz#c922ad22b38395abe9d3870f02fa8134ed709007" + integrity sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w== + dependencies: + crc-32 "^1.2.0" + readable-stream "^3.4.0" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +dayjs@^1.11.5: + version "1.11.5" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.5.tgz#00e8cc627f231f9499c19b38af49f56dc0ac5e93" + integrity sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA== + +debug@4, debug@^4.1.1, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1" + integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ== + dependencies: + file-type "^5.2.0" + is-stream "^1.1.0" + tar-stream "^1.5.2" + +decompress-tarbz2@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b" + integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A== + dependencies: + decompress-tar "^4.1.0" + file-type "^6.1.0" + is-stream "^1.1.0" + seek-bzip "^1.0.5" + unbzip2-stream "^1.0.9" + +decompress-targz@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee" + integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w== + dependencies: + decompress-tar "^4.1.1" + file-type "^5.2.0" + is-stream "^1.1.0" + +decompress-unzip@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69" + integrity sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw== + dependencies: + file-type "^3.8.0" + get-stream "^2.2.0" + pify "^2.3.0" + yauzl "^2.4.2" + +decompress@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.1.tgz#007f55cc6a62c055afa37c07eb6a4ee1b773f118" + integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ== + dependencies: + decompress-tar "^4.0.0" + decompress-tarbz2 "^4.0.0" + decompress-targz "^4.0.0" + decompress-unzip "^4.0.1" + graceful-fs "^4.1.10" + make-dir "^1.0.0" + pify "^2.3.0" + strip-dirs "^2.0.0" + +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +deferred@^0.7.11: + version "0.7.11" + resolved "https://registry.yarnpkg.com/deferred/-/deferred-0.7.11.tgz#8c3f272fd5e6ce48a969cb428c0d233ba2146322" + integrity sha512-8eluCl/Blx4YOGwMapBvXRKxHXhA8ejDXYzEaK8+/gtcm8hRMhSLmXSqDmNUKNc/C8HNSmuyyp/hflhqDAvK2A== + dependencies: + d "^1.0.1" + es5-ext "^0.10.50" + event-emitter "^0.3.5" + next-tick "^1.0.0" + timers-ext "^0.1.7" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +dezalgo@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + integrity sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ== + dependencies: + asap "^2.0.0" + wrappy "1" + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dotenv-expand@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-9.0.0.tgz#1fd37e2cd63ea0b5f7389fb87256efc38b035b26" + integrity sha512-uW8Hrhp5ammm9x7kBLR6jDfujgaDarNA02tprvZdyrJ7MpdzD1KyrIHG4l+YoC2fJ2UcdFdNWNWIjt+sexBHJw== + +dotenv@^16.0.3: + version "16.0.3" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" + integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== + +duration@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/duration/-/duration-0.2.2.tgz#ddf149bc3bc6901150fe9017111d016b3357f529" + integrity sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg== + dependencies: + d "1" + es5-ext "~0.10.46" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +es-abstract@^1.19.0, es-abstract@^1.19.5, es-abstract@^1.20.0: + version "1.20.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861" + integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.3" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.2" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es5-ext@^0.10.12, es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.47, es5-ext@^0.10.49, es5-ext@^0.10.50, es5-ext@^0.10.53, es5-ext@^0.10.61, es5-ext@^0.10.62, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46: + version "0.10.62" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" + integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== + dependencies: + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + next-tick "^1.1.0" + +es6-iterator@^2.0.3, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-set@^0.1.5: + version "0.1.6" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.6.tgz#5669e3b2aa01d61a50ba79964f733673574983b8" + integrity sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw== + dependencies: + d "^1.0.1" + es5-ext "^0.10.62" + es6-iterator "~2.0.3" + es6-symbol "^3.1.3" + event-emitter "^0.3.5" + type "^2.7.2" + +es6-symbol@^3.1.1, es6-symbol@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +es6-weak-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" + integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== + dependencies: + d "1" + es5-ext "^0.10.46" + es6-iterator "^2.0.3" + es6-symbol "^3.1.1" + +esbuild-android-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be" + integrity sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ== + +esbuild-android-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz#8ce69d7caba49646e009968fe5754a21a9871771" + integrity sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg== + +esbuild-darwin-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz#24ba67b9a8cb890a3c08d9018f887cc221cdda25" + integrity sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug== + +esbuild-darwin-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz#3f7cdb78888ee05e488d250a2bdaab1fa671bf73" + integrity sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw== + +esbuild-freebsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz#09250f997a56ed4650f3e1979c905ffc40bbe94d" + integrity sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg== + +esbuild-freebsd-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz#bafb46ed04fc5f97cbdb016d86947a79579f8e48" + integrity sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q== + +esbuild-linux-32@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz#e2a8c4a8efdc355405325033fcebeb941f781fe5" + integrity sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw== + +esbuild-linux-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz#de5fdba1c95666cf72369f52b40b03be71226652" + integrity sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg== + +esbuild-linux-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz#dae4cd42ae9787468b6a5c158da4c84e83b0ce8b" + integrity sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig== + +esbuild-linux-arm@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz#a2c1dff6d0f21dbe8fc6998a122675533ddfcd59" + integrity sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw== + +esbuild-linux-mips64le@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz#d9918e9e4cb972f8d6dae8e8655bf9ee131eda34" + integrity sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw== + +esbuild-linux-ppc64le@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz#3f9a0f6d41073fb1a640680845c7de52995f137e" + integrity sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ== + +esbuild-linux-riscv64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz#618853c028178a61837bc799d2013d4695e451c8" + integrity sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg== + +esbuild-linux-s390x@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz#d1885c4c5a76bbb5a0fe182e2c8c60eb9e29f2a6" + integrity sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA== + +esbuild-netbsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz#69ae917a2ff241b7df1dbf22baf04bd330349e81" + integrity sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w== + +esbuild-openbsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz#db4c8495287a350a6790de22edea247a57c5d47b" + integrity sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw== + +esbuild-sunos-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da" + integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw== + +esbuild-windows-32@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz#f8aaf9a5667630b40f0fb3aa37bf01bbd340ce31" + integrity sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w== + +esbuild-windows-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz#bf54b51bd3e9b0f1886ffdb224a4176031ea0af4" + integrity sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ== + +esbuild-windows-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz#937d15675a15e4b0e4fafdbaa3a01a776a2be982" + integrity sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg== + +esbuild@^0.14.11: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.54.tgz#8b44dcf2b0f1a66fc22459943dccf477535e9aa2" + integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA== + optionalDependencies: + "@esbuild/linux-loong64" "0.14.54" + esbuild-android-64 "0.14.54" + esbuild-android-arm64 "0.14.54" + esbuild-darwin-64 "0.14.54" + esbuild-darwin-arm64 "0.14.54" + esbuild-freebsd-64 "0.14.54" + esbuild-freebsd-arm64 "0.14.54" + esbuild-linux-32 "0.14.54" + esbuild-linux-64 "0.14.54" + esbuild-linux-arm "0.14.54" + esbuild-linux-arm64 "0.14.54" + esbuild-linux-mips64le "0.14.54" + esbuild-linux-ppc64le "0.14.54" + esbuild-linux-riscv64 "0.14.54" + esbuild-linux-s390x "0.14.54" + esbuild-netbsd-64 "0.14.54" + esbuild-openbsd-64 "0.14.54" + esbuild-sunos-64 "0.14.54" + esbuild-windows-32 "0.14.54" + esbuild-windows-64 "0.14.54" + esbuild-windows-arm64 "0.14.54" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +esniff@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/esniff/-/esniff-1.1.0.tgz#c66849229f91464dede2e0d40201ed6abf65f2ac" + integrity sha512-vmHXOeOt7FJLsqofvFk4WB3ejvcHizCd8toXXwADmYfd02p2QwHRgkUbhYDX54y08nqk818CUTWipgZGlyN07g== + dependencies: + d "1" + es5-ext "^0.10.12" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +essentials@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/essentials/-/essentials-1.2.0.tgz#c6361fb648f5c8c0c51279707f6139e521a05807" + integrity sha512-kP/j7Iw7KeNE8b/o7+tr9uX2s1wegElGOoGZ2Xm35qBr4BbbEcH3/bxR2nfH9l9JANCq9AUrvKw+gRuHtZp0HQ== + dependencies: + uni-global "^1.0.0" + +event-emitter@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== + dependencies: + d "1" + es5-ext "~0.10.14" + +events@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw== + +ext-list@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37" + integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA== + dependencies: + mime-db "^1.28.0" + +ext-name@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ext-name/-/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6" + integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ== + dependencies: + ext-list "^2.0.0" + sort-keys-length "^1.0.0" + +ext@^1.1.2, ext@^1.4.0, ext@^1.6.0, ext@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" + integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== + dependencies: + type "^2.7.2" + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.7, fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-safe-stringify@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + +fastest-levenshtein@^1.0.16: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-type@^16.5.4: + version "16.5.4" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-16.5.4.tgz#474fb4f704bee427681f98dd390058a172a6c2fd" + integrity sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw== + dependencies: + readable-web-to-node-stream "^3.0.0" + strtok3 "^6.2.4" + token-types "^4.1.1" + +file-type@^3.8.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" + integrity sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA== + +file-type@^4.2.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-4.4.0.tgz#1b600e5fca1fbdc6e80c0a70c71c8dba5f7906c5" + integrity sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ== + +file-type@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6" + integrity sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ== + +file-type@^6.1.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919" + integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg== + +filename-reserved-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" + integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ== + +filenamify@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-4.3.0.tgz#62391cb58f02b09971c9d4f9d63b3cf9aba03106" + integrity sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg== + dependencies: + filename-reserved-regex "^2.0.0" + strip-outer "^1.0.1" + trim-repeated "^1.0.0" + +filesize@^10.0.5: + version "10.0.5" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-10.0.5.tgz#d77553eb00a525f4cc7983047d2197cda6fff321" + integrity sha512-qrzyt8gLh86nsyYiC3ibI5KyIYRCWg2yqIklYrWF4a0qNfekik4OQfn7AoPJG2hRrPMSlH6fET4VEITweZAzjA== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-requires@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/find-requires/-/find-requires-1.0.0.tgz#a4a750ed37133dee8a9cc8efd2cc56aca01dd96d" + integrity sha512-UME7hNwBfzeISSFQcBEDemEEskpOjI/shPrpJM5PI4DSdn6hX0dmz+2dL70blZER2z8tSnTRL+2rfzlYgtbBoQ== + dependencies: + es5-ext "^0.10.49" + esniff "^1.1.0" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +follow-redirects@^1.14.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +formidable@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-2.0.1.tgz#4310bc7965d185536f9565184dee74fbb75557ff" + integrity sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ== + dependencies: + dezalgo "1.0.3" + hexoid "1.0.0" + once "1.4.0" + qs "6.9.3" + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fs2@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/fs2/-/fs2-0.3.9.tgz#3869e5b2ec7e0622eaa5f4373df540d3d427a9fb" + integrity sha512-WsOqncODWRlkjwll+73bAxVW3JPChDgaPX3DT4iTTm73UmG4VgALa7LaFblP232/DN60itkOrPZ8kaP1feksGQ== + dependencies: + d "^1.0.1" + deferred "^0.7.11" + es5-ext "^0.10.53" + event-emitter "^0.3.5" + ignore "^5.1.8" + memoizee "^0.4.14" + type "^2.1.0" + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" + integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-stdin@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" + integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== + +get-stream@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" + integrity sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA== + dependencies: + object-assign "^4.0.1" + pinkie-promise "^2.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^7.0.5, glob@^7.1.4, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globby@^11.0.1, globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +got@^11.8.5: + version "11.8.5" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.5.tgz#ce77d045136de56e8f024bebb82ea349bc730046" + integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +graceful-fs@^4.1.10, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +graphlib@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/graphlib/-/graphlib-2.1.8.tgz#5761d414737870084c92ec7b5dbcb0592c9d35da" + integrity sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A== + dependencies: + lodash "^4.17.15" + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hexoid@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hexoid/-/hexoid-1.0.0.tgz#ad10c6573fb907de23d9ec63a711267d9dc9bc18" + integrity sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g== + +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.1.8, ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inquirer@^8.2.4: + version "8.2.4" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.4.tgz#ddbfe86ca2f67649a67daa6f1051c128f684f0b4" + integrity sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg== + 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.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^7.0.0" + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +is-arguments@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-docker@^2.0.0, is-docker@^2.1.1, is-docker@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-function@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-natural-number@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" + integrity sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ== + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== + +is-promise@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" + integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.3, is-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.9.tgz#246d77d2871e7d9f5aeb1d54b9f52c71329ece67" + integrity sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-abstract "^1.20.0" + for-each "^0.3.3" + has-tostringtag "^1.0.0" + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-wsl@^2.1.1, is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isomorphic-ws@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" + integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== + +jmespath@0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076" + integrity sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw== + +js-yaml@^3.13.1, js-yaml@^3.14.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-cycle@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/json-cycle/-/json-cycle-1.3.0.tgz#c4f6f7d926c2979012cba173b06f9cae9e866d3f" + integrity sha512-FD/SedD78LCdSvJaOUQAXseT8oQBb5z6IVYaQaCrVUlu9zOAr1BDdKyVYQaSD/GDsAMrXpKcOyBD4LIl8nfjHw== + +json-refs@^3.0.15: + version "3.0.15" + resolved "https://registry.yarnpkg.com/json-refs/-/json-refs-3.0.15.tgz#1089f4acf263a3152c790479485195cd6449e855" + integrity sha512-0vOQd9eLNBL18EGl5yYaO44GhixmImes2wiYn9Z3sag3QnehWrYWlB9AFtMxCL2Bj3fyxgDYkxGFEU/chlYssw== + dependencies: + commander "~4.1.1" + graphlib "^2.1.8" + js-yaml "^3.13.1" + lodash "^4.17.15" + native-promise-only "^0.8.1" + path-loader "^1.0.10" + slash "^3.0.0" + uri-js "^4.2.2" + +json-schema-to-ts@^1.5.0: + version "1.6.5" + resolved "https://registry.yarnpkg.com/json-schema-to-ts/-/json-schema-to-ts-1.6.5.tgz#9cc1d3806d33bc7b4700354b8d449b6ad79c3473" + integrity sha512-BLUdzgz50XV+NMrSg8+KrUvV7Oh1eb/kLsyPbkWXFTXTloWkAsq7MbAppibE+DyMy4PasS/7bFQPwTIHx35r+A== + dependencies: + "@types/json-schema" "^7.0.6" + ts-toolbelt "^6.15.5" + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jszip@^3.9.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" + integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + setimmediate "^1.0.5" + +jwt-decode@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-2.2.0.tgz#7d86bd56679f58ce6a84704a657dd392bba81a79" + integrity sha512-86GgN2vzfUu7m9Wcj63iUkuDzFNYFVmjeDm2GzWpUk+opB0pEpMsw6ePCMrhYkumz2C1ihqtZzOMAg7FiXcNoQ== + +jwt-decode@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-3.1.2.tgz#3fb319f3675a2df0c2895c8f5e9fa4b67b04ed59" + integrity sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A== + +keyv@^4.0.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.0.tgz#dbce9ade79610b6e641a9a65f2f6499ba06b9bc6" + integrity sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA== + dependencies: + json-buffer "3.0.1" + +lazystream@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" + integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== + dependencies: + readable-stream "^2.0.5" + +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== + +lodash.difference@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" + integrity sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA== + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.union@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" + integrity sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw== + +lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-node@^8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/log-node/-/log-node-8.0.3.tgz#441bf1a72f9f1c28b62f5bf42e9eb3765af74d73" + integrity sha512-1UBwzgYiCIDFs8A0rM2QdBFo8Wd8UQ0HrSTu/MNI+/2zN3NoHRj2fhplurAyuxTYUXu3Oohugq1jAn5s05u1MQ== + dependencies: + ansi-regex "^5.0.1" + cli-color "^2.0.1" + cli-sprintf-format "^1.1.1" + d "^1.0.1" + es5-ext "^0.10.53" + sprintf-kit "^2.0.1" + supports-color "^8.1.1" + type "^2.5.0" + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +log@^6.0.0, log@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/log/-/log-6.3.1.tgz#fcf9bd71fe2274a51ad608dc95c549dd7512146b" + integrity sha512-McG47rJEWOkXTDioZzQNydAVvZNeEkSyLJ1VWkFwfW+o1knW+QSi8D1KjPn/TnctV+q99lkvJNe1f0E1IjfY2A== + dependencies: + d "^1.0.1" + duration "^0.2.2" + es5-ext "^0.10.53" + event-emitter "^0.3.5" + sprintf-kit "^2.0.1" + type "^2.5.0" + uni-global "^1.0.0" + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lru-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" + integrity sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ== + dependencies: + es5-ext "~0.10.2" + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +memoizee@^0.4.14, memoizee@^0.4.15: + version "0.4.15" + resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.15.tgz#e6f3d2da863f318d02225391829a6c5956555b72" + integrity sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ== + dependencies: + d "^1.0.1" + es5-ext "^0.10.53" + es6-weak-map "^2.0.3" + event-emitter "^0.3.5" + is-promise "^2.2.2" + lru-queue "^0.1.0" + next-tick "^1.1.0" + timers-ext "^0.1.7" + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0, mime-db@^1.28.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.7" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + +minipass@^3.0.0: + version "3.3.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" + integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== + dependencies: + yallist "^4.0.0" + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +native-promise-only@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/native-promise-only/-/native-promise-only-0.8.1.tgz#20a318c30cb45f71fe7adfbf7b21c99c1472ef11" + integrity sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg== + +ncjsm@^4.3.0, ncjsm@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ncjsm/-/ncjsm-4.3.1.tgz#794cd307c877f2dad1e2d71bf7e36074b1bde6d9" + integrity sha512-5hy/Mr7KKLS/AFyY4Be8q0aXz8wYd2PN3cSSMBeQHfcrK6Sbd0EGoQxiNrUoKMAYhl67v4A975f6Gy1oEqfJlA== + dependencies: + builtin-modules "^3.3.0" + deferred "^0.7.11" + es5-ext "^0.10.61" + es6-set "^0.1.5" + ext "^1.6.0" + find-requires "^1.0.0" + fs2 "^0.3.9" + type "^2.6.0" + +next-tick@1, next-tick@^1.0.0, next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-dir@^0.1.17: + version "0.1.17" + resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" + integrity sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg== + dependencies: + minimatch "^3.0.2" + +node-fetch@^2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npm-registry-utilities@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/npm-registry-utilities/-/npm-registry-utilities-1.0.0.tgz#75dc21fcb96020d506b99823407c2088508a4edd" + integrity sha512-9xYfSJy2IFQw1i6462EJzjChL9e65EfSo2Cw6kl0EFeDp05VvU+anrQk3Fc0d1MbVCq7rWIxeer89O9SUQ/uOg== + dependencies: + ext "^1.6.0" + fs2 "^0.3.9" + memoizee "^0.4.15" + node-fetch "^2.6.7" + semver "^7.3.5" + type "^2.6.0" + validate-npm-package-name "^3.0.0" + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-hash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== + +object-inspect@^1.12.2, object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +once@1.4.0, once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^7.4.2: + version "7.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +open@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + 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-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-event@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/p-event/-/p-event-4.2.0.tgz#af4b049c8acd91ae81083ebd1e6f5cae2044c1b5" + integrity sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ== + dependencies: + p-timeout "^3.1.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-timeout@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== + dependencies: + p-finally "^1.0.0" + +pako@~1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + +path-loader@^1.0.10: + version "1.0.12" + resolved "https://registry.yarnpkg.com/path-loader/-/path-loader-1.0.12.tgz#c5a99d464da27cfde5891d158a68807abbdfa5f5" + integrity sha512-n7oDG8B+k/p818uweWrOixY9/Dsr89o2TkCm6tOTex3fpdo2+BFDgR+KpB37mGKBRsBAlR8CIJMFN0OEy/7hIQ== + dependencies: + native-promise-only "^0.8.1" + superagent "^7.1.6" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +path2@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/path2/-/path2-0.1.0.tgz#639828942cdbda44a41a45b074ae8873483b4efa" + integrity sha512-TX+cz8Jk+ta7IvRy2FAej8rdlbrP0+uBIkP/5DTODez/AuL/vSb30KuAdDxGVREXzn8QfAiu5mJYJ1XjbOhEPA== + +peek-readable@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-4.1.0.tgz#4ece1111bf5c2ad8867c314c81356847e8a62e72" + integrity sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg== + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process-utils@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/process-utils/-/process-utils-4.0.0.tgz#3e5b204e1d38e62fe39ef3144664a1fe94097b9e" + integrity sha512-fMyMQbKCxX51YxR7YGCzPjLsU3yDzXFkP4oi1/Mt5Ixnk7GO/7uUTj8mrCHUwuvozWzI+V7QSJR9cZYnwNOZPg== + dependencies: + ext "^1.4.0" + fs2 "^0.3.9" + memoizee "^0.4.14" + type "^2.1.0" + +promise-queue@^2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/promise-queue/-/promise-queue-2.2.5.tgz#2f6f5f7c0f6d08109e967659c79b88a9ed5e93b4" + integrity sha512-p/iXrPSVfnqPft24ZdNNLECw/UrtLTpT3jpAAMzl/o5/rDsGCPo3/CQS2611flL6LkoEJ3oQZw7C8Q80ZISXRQ== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@6.9.3: + version "6.9.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.3.tgz#bfadcd296c2d549f1dffa560619132c977f5008e" + integrity sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw== + +qs@^6.10.3: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== + +querystring@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd" + integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +ramda@^0.27.0: + version "0.27.2" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.27.2.tgz#84463226f7f36dc33592f6f4ed6374c48306c3f1" + integrity sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA== + +readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.0, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-web-to-node-stream@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz#5d52bb5df7b54861fd48d015e93a2cb87b3ee0bb" + integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw== + dependencies: + readable-stream "^3.6.0" + +readdir-glob@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.2.tgz#b185789b8e6a43491635b6953295c5c5e3fd224c" + integrity sha512-6RLVvwJtVwEDfPdn6X6Ille4/lxGl0ATOY4FN/B9nxQcgOazvvI0nodiD19ScKq0PvA/29VpaOQML36o5IzZWA== + dependencies: + minimatch "^5.1.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +resolve-alpn@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" + integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== + dependencies: + queue-microtask "^1.2.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@^7.5.5: + version "7.5.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.7.tgz#2ec0d57fdc89ece220d2e702730ae8f1e49def39" + integrity sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA== + dependencies: + tslib "^2.1.0" + +safe-buffer@5.2.1, safe-buffer@^5.1.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" + integrity sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA== + +sax@>=0.6.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +seek-bzip@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.6.tgz#35c4171f55a680916b52a07859ecf3b5857f21c4" + integrity sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ== + dependencies: + commander "^2.8.1" + +semver@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +serverless-esbuild@^1.23.3: + version "1.33.0" + resolved "https://registry.yarnpkg.com/serverless-esbuild/-/serverless-esbuild-1.33.0.tgz#e2b074e054d252c4e6450ec932d5ea89d097891e" + integrity sha512-lXG3HZ7Qn6KptSFNvw9xthTsZ9lEOaKE/W03/TJ81+xmq6ONKUuAs+2dFLofEnHCWfbdfagaaiX9Nf0fttqXMg== + dependencies: + acorn "^8.7.1" + acorn-walk "^8.2.0" + anymatch "^3.1.2" + archiver "^5.3.0" + bestzip "^2.2.0" + chokidar "^3.4.3" + fs-extra "^10.1.0" + globby "^11.0.1" + p-map "^4.0.0" + ramda "^0.27.0" + semver "^7.3.5" + +serverless@^3.0.0: + version "3.23.0" + resolved "https://registry.yarnpkg.com/serverless/-/serverless-3.23.0.tgz#407f804d55f3c11212b8e4de4325006b01658f7d" + integrity sha512-R1L3QeF3KGbRANQZBAhxwwfW1VKY8Mmp5cZwJmA8d5sSGYSczN6l9ST+0Uyfal+K9HtE8MP+ggaggaabor28EQ== + dependencies: + "@serverless/dashboard-plugin" "^6.2.2" + "@serverless/platform-client" "^4.3.2" + "@serverless/utils" "^6.7.0" + ajv "^8.11.0" + ajv-formats "^2.1.1" + archiver "^5.3.1" + aws-sdk "^2.1231.0" + bluebird "^3.7.2" + cachedir "^2.3.0" + chalk "^4.1.2" + child-process-ext "^2.1.1" + ci-info "^3.5.0" + cli-progress-footer "^2.3.2" + d "^1.0.1" + dayjs "^1.11.5" + decompress "^4.2.1" + dotenv "^16.0.3" + dotenv-expand "^9.0.0" + essentials "^1.2.0" + ext "^1.7.0" + fastest-levenshtein "^1.0.16" + filesize "^10.0.5" + fs-extra "^10.1.0" + get-stdin "^8.0.0" + globby "^11.1.0" + got "^11.8.5" + graceful-fs "^4.2.10" + https-proxy-agent "^5.0.1" + is-docker "^2.2.1" + js-yaml "^4.1.0" + json-cycle "^1.3.0" + json-refs "^3.0.15" + lodash "^4.17.21" + memoizee "^0.4.15" + micromatch "^4.0.5" + node-fetch "^2.6.7" + npm-registry-utilities "^1.0.0" + object-hash "^3.0.0" + open "^8.4.0" + path2 "^0.1.0" + process-utils "^4.0.0" + promise-queue "^2.2.5" + require-from-string "^2.0.2" + semver "^7.3.8" + signal-exit "^3.0.7" + strip-ansi "^6.0.1" + supports-color "^8.1.1" + tar "^6.1.11" + timers-ext "^0.1.7" + type "^2.7.2" + untildify "^4.0.0" + uuid "^9.0.0" + yaml-ast-parser "0.0.43" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.2, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +simple-git@^3.7.0: + version "3.14.1" + resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.14.1.tgz#68018a5f168f8a568862e30b692004b37c3b5ced" + integrity sha512-1ThF4PamK9wBORVGMK9HK5si4zoGS2GpRO7tkAFObA4FZv6dKaCVHLQT+8zlgiBm6K2h+wEU9yOaFCu/SR3OyA== + dependencies: + "@kwsites/file-exists" "^1.1.1" + "@kwsites/promise-deferred" "^1.1.1" + debug "^4.3.4" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +sort-keys-length@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188" + integrity sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw== + dependencies: + sort-keys "^1.0.0" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg== + dependencies: + is-plain-obj "^1.0.0" + +split2@^3.1.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +sprintf-kit@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/sprintf-kit/-/sprintf-kit-2.0.1.tgz#bb837e8fa4b28f094531d8e33669120027236bb8" + integrity sha512-2PNlcs3j5JflQKcg4wpdqpZ+AjhQJ2OZEo34NXDtlB0tIPG84xaaXhpA8XFacFiwjKA4m49UOYG83y3hbMn/gQ== + dependencies: + es5-ext "^0.10.53" + +stream-promise@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/stream-promise/-/stream-promise-3.2.0.tgz#bad976f2d0e1f11d56cc95cc11907cfd869a27ff" + integrity sha512-P+7muTGs2C8yRcgJw/PPt61q7O517tDHiwYEzMWo1GSBCcZedUMT/clz7vUNsSxFphIlJ6QUL4GexQKlfJoVtA== + dependencies: + "2-thenable" "^1.0.0" + es5-ext "^0.10.49" + is-stream "^1.1.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string.prototype.trimend@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" + integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +string.prototype.trimstart@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" + integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-dirs@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5" + integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g== + dependencies: + is-natural-number "^4.0.1" + +strip-outer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" + integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== + dependencies: + escape-string-regexp "^1.0.2" + +strtok3@^6.2.4: + version "6.3.0" + resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-6.3.0.tgz#358b80ffe6d5d5620e19a073aa78ce947a90f9a0" + integrity sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw== + dependencies: + "@tokenizer/token" "^0.3.0" + peek-readable "^4.1.0" + +superagent@^7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-7.1.6.tgz#64f303ed4e4aba1e9da319f134107a54cacdc9c6" + integrity sha512-gZkVCQR1gy/oUXr+kxJMLDjla434KmSOKbx5iGD30Ql+AkJQ/YlPKECJy2nhqOsHLjGHzoDTXNSjhnvWhzKk7g== + dependencies: + component-emitter "^1.3.0" + cookiejar "^2.1.3" + debug "^4.3.4" + fast-safe-stringify "^2.1.1" + form-data "^4.0.0" + formidable "^2.0.1" + methods "^1.1.2" + mime "2.6.0" + qs "^6.10.3" + readable-stream "^3.6.0" + semver "^7.3.7" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +tar-stream@^1.5.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" + integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== + dependencies: + bl "^1.0.0" + buffer-alloc "^1.2.0" + end-of-stream "^1.0.0" + fs-constants "^1.0.0" + readable-stream "^2.3.0" + to-buffer "^1.1.1" + xtend "^4.0.0" + +tar-stream@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar@^6.1.11: + version "6.1.11" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +throat@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" + integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== + +through@^2.3.6, through@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +timers-ext@^0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6" + integrity sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ== + dependencies: + es5-ext "~0.10.46" + next-tick "1" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-buffer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" + integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +token-types@^4.1.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/token-types/-/token-types-4.2.1.tgz#0f897f03665846982806e138977dbe72d44df753" + integrity sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ== + dependencies: + "@tokenizer/token" "^0.3.0" + ieee754 "^1.2.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +traverse@^0.6.6: + version "0.6.7" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.7.tgz#46961cd2d57dd8706c36664acde06a248f1173fe" + integrity sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg== + +trim-repeated@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" + integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg== + dependencies: + escape-string-regexp "^1.0.2" + +ts-node@^10.4.0: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.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" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +ts-toolbelt@^6.15.5: + version "6.15.5" + resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-6.15.5.tgz#cb3b43ed725cb63644782c64fbcad7d8f28c0a83" + integrity sha512-FZIXf1ksVyLcfr7M317jbB67XFJhOO1YqdTcuGaq9q5jLUoTikukZ+98TPjKiP2jC5CgmYdWWYs0s2nLSU0/1A== + +tsconfig-paths@^3.9.0: + version "3.14.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.1.0, type@^2.5.0, type@^2.6.0, type@^2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" + integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== + +typescript@^4.1.3: + version "4.8.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6" + integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +unbzip2-stream@^1.0.9: + version "1.4.3" + resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" + integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== + dependencies: + buffer "^5.2.1" + through "^2.3.8" + +uni-global@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/uni-global/-/uni-global-1.0.0.tgz#3583c449e87a2d9dc270ea221410a649bcdad040" + integrity sha512-WWM3HP+siTxzIWPNUg7hZ4XO8clKi6NoCAJJWnuRL+BAqyFXF8gC03WNyTefGoUXYc47uYgXxpKLIEvo65PEHw== + dependencies: + type "^2.5.0" + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +untildify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + integrity sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ== + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util@^0.12.4: + version "0.12.5" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" + +uuid@8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.0.0.tgz#bc6ccf91b5ff0ac07bbcdbf1c7c4e150db4dbb6c" + integrity sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +validate-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== + dependencies: + builtins "^1.0.3" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.2: + version "1.1.8" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.8.tgz#0cfd53401a6f334d90ed1125754a42ed663eb01f" + integrity sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-abstract "^1.20.0" + for-each "^0.3.3" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.9" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + 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.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +ws@^7.5.3: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +xml2js@0.4.19: + version "0.4.19" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" + integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== + dependencies: + sax ">=0.6.0" + xmlbuilder "~9.0.1" + +xmlbuilder@~9.0.1: + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + integrity sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ== + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml-ast-parser@0.0.43: + version "0.0.43" + resolved "https://registry.yarnpkg.com/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz#e8a23e6fb4c38076ab92995c5dca33f3d3d7c9bb" + integrity sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A== + +yamljs@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/yamljs/-/yamljs-0.3.0.tgz#dc060bf267447b39f7304e9b2bfbe8b5a7ddb03b" + integrity sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ== + dependencies: + argparse "^1.0.7" + glob "^7.0.5" + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + 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" + +yauzl@^2.4.2: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +zip-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.1.0.tgz#51dd326571544e36aa3f756430b313576dc8fc79" + integrity sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A== + dependencies: + archiver-utils "^2.1.0" + compress-commons "^4.1.0" + readable-stream "^3.6.0" From 416494a979791c83edd6894dfa55cbeb69ef1590 Mon Sep 17 00:00:00 2001 From: neil Date: Mon, 17 Oct 2022 20:30:05 +0800 Subject: [PATCH 02/37] test deploy sls --- .github/workflows/staging.yml | 121 +++++++++++++++++----------------- 1 file changed, 61 insertions(+), 60 deletions(-) diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index a79a87f..4eb179e 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -11,62 +11,62 @@ jobs: deploy: runs-on: ubuntu-latest steps: - - name: inject slug/short variables - uses: rlespinasse/github-slug-action@v3.x - - name: Set STAGE variable in environment for next steps - run: echo "STAGE=pr-${{ github.event.number }}-${{ env.GITHUB_HEAD_REF_SLUG }}" >> $GITHUB_ENV + # - name: inject slug/short variables + # uses: rlespinasse/github-slug-action@v3.x + # - name: Set STAGE variable in environment for next steps + # run: echo "STAGE=pr-${{ github.event.number }}-${{ env.GITHUB_HEAD_REF_SLUG }}" >> $GITHUB_ENV - - name: Create Deployment - uses: bobheadxi/deployments@v1 - id: deployment - with: - step: start - env: ${{ env.STAGE }} - ref: ${{ github.head_ref }} - override: true + # - name: Create Deployment + # uses: bobheadxi/deployments@v1 + # id: deployment + # with: + # step: start + # env: ${{ env.STAGE }} + # ref: ${{ github.head_ref }} + # override: true - - uses: actions/checkout@v3 + # - uses: actions/checkout@v3 - - name: Apply Staging Configuration - run: | - sed -i -e 's/^baseURL\s*=.*$/baseUrl = ""/i' config.toml - echo "relativeurls = true" >>config.toml - working-directory: src + # - name: Apply Staging Configuration + # run: | + # sed -i -e 's/^baseURL\s*=.*$/baseUrl = ""/i' config.toml + # echo "relativeurls = true" >>config.toml + # working-directory: src - - name: Copy packages.json summary from dist.tea.xyz - uses: prewk/s3-cp-action@v2 - with: - aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - source: 's3://dist.tea.xyz/mock_packages.json' - dest: './src/data/packages.json' + # - name: Copy packages.json summary from dist.tea.xyz + # uses: prewk/s3-cp-action@v2 + # with: + # aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }} + # aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + # source: 's3://dist.tea.xyz/mock_packages.json' + # dest: './src/data/packages.json' - - name: Create Package Detail Pages from packages.json - uses: getneil/jq-action@v1 - id: version - with: - cmd: '.github/build-package-pages.sh src/data/packages.json src/content/packages' + # - name: Create Package Detail Pages from packages.json + # uses: getneil/jq-action@v1 + # id: version + # with: + # cmd: '.github/build-package-pages.sh src/data/packages.json src/content/packages' - - run: .github/mk-pantry-accessible.sh ${{ secrets.TEMP_JACOBS_GITHUB_PAT }} + # - run: .github/mk-pantry-accessible.sh ${{ secrets.TEMP_JACOBS_GITHUB_PAT }} - - uses: teaxyz/setup@v0 - with: - target: build + # - uses: teaxyz/setup@v0 + # with: + # target: build - - name: Check for broken links - uses: lycheeverse/lychee-action@v1 - with: - fail: true - args: --verbose --no-progress './public/**/*.md' './public/**/*.html' - env: - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + # - name: Check for broken links + # uses: lycheeverse/lychee-action@v1 + # with: + # fail: true + # args: --verbose --no-progress './public/**/*.md' './public/**/*.html' + # env: + # GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} - - uses: actions/setup-node@v3 - with: - node-version: 14 - - uses: bahmutov/npm-install@v1 - with: - working-directory: .cdk + # - uses: actions/setup-node@v3 + # with: + # node-version: 14 + # - uses: bahmutov/npm-install@v1 + # with: + # working-directory: .cdk - uses: aws-actions/configure-aws-credentials@v1 with: @@ -74,10 +74,10 @@ jobs: aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 - - name: Deploy to AWS - id: cdk_deploy - run: yarn deploy - working-directory: .cdk + # - name: Deploy to AWS + # id: cdk_deploy + # run: yarn deploy + # working-directory: .cdk - uses: borales/actions-yarn@v3.0.0 with: @@ -88,13 +88,14 @@ jobs: uses: Teakowa/serverless-action@master with: args: --stage prod deploy + working-directory: lambdas - - name: Seal Deployment - uses: bobheadxi/deployments@v1 - if: always() - with: - step: finish - status: ${{ job.status }} - deployment_id: ${{ steps.deployment.outputs.deployment_id }} - env: ${{ env.STAGE }} - env_url: ${{ steps.cdk_deploy.outputs.env_url }} + # - name: Seal Deployment + # uses: bobheadxi/deployments@v1 + # if: always() + # with: + # step: finish + # status: ${{ job.status }} + # deployment_id: ${{ steps.deployment.outputs.deployment_id }} + # env: ${{ env.STAGE }} + # env_url: ${{ steps.cdk_deploy.outputs.env_url }} From ec3e15c1201dbe3cbb3b80449fea5ad785cb7651 Mon Sep 17 00:00:00 2001 From: neil Date: Mon, 17 Oct 2022 20:38:33 +0800 Subject: [PATCH 03/37] set correct working directory --- .github/workflows/staging.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index 4eb179e..684959a 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -80,15 +80,15 @@ jobs: # working-directory: .cdk - uses: borales/actions-yarn@v3.0.0 + working-directory: ./lambdas with: cmd: install - working-directory: lambdas - name: deploy + working-directory: ./lambdas uses: Teakowa/serverless-action@master with: args: --stage prod deploy - working-directory: lambdas # - name: Seal Deployment # uses: bobheadxi/deployments@v1 From 843396391e8a9e4c923ff56951ed813bb0f9c77c Mon Sep 17 00:00:00 2001 From: neil Date: Mon, 17 Oct 2022 20:41:51 +0800 Subject: [PATCH 04/37] test parallel deploy --- .github/workflows/staging.yml | 157 ++++++++++++++++++---------------- 1 file changed, 84 insertions(+), 73 deletions(-) diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index 684959a..71664de 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -8,79 +8,19 @@ env: TEA_SECRET: ${{ secrets.TEA_SECRET }} jobs: - deploy: + deploy_sls: runs-on: ubuntu-latest + defaults: + run: + working-directory: ./lambdas steps: - # - name: inject slug/short variables - # uses: rlespinasse/github-slug-action@v3.x - # - name: Set STAGE variable in environment for next steps - # run: echo "STAGE=pr-${{ github.event.number }}-${{ env.GITHUB_HEAD_REF_SLUG }}" >> $GITHUB_ENV - - # - name: Create Deployment - # uses: bobheadxi/deployments@v1 - # id: deployment - # with: - # step: start - # env: ${{ env.STAGE }} - # ref: ${{ github.head_ref }} - # override: true - - # - uses: actions/checkout@v3 - - # - name: Apply Staging Configuration - # run: | - # sed -i -e 's/^baseURL\s*=.*$/baseUrl = ""/i' config.toml - # echo "relativeurls = true" >>config.toml - # working-directory: src - - # - name: Copy packages.json summary from dist.tea.xyz - # uses: prewk/s3-cp-action@v2 - # with: - # aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }} - # aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - # source: 's3://dist.tea.xyz/mock_packages.json' - # dest: './src/data/packages.json' - - # - name: Create Package Detail Pages from packages.json - # uses: getneil/jq-action@v1 - # id: version - # with: - # cmd: '.github/build-package-pages.sh src/data/packages.json src/content/packages' - - # - run: .github/mk-pantry-accessible.sh ${{ secrets.TEMP_JACOBS_GITHUB_PAT }} - - # - uses: teaxyz/setup@v0 - # with: - # target: build - - # - name: Check for broken links - # uses: lycheeverse/lychee-action@v1 - # with: - # fail: true - # args: --verbose --no-progress './public/**/*.md' './public/**/*.html' - # env: - # GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} - - # - uses: actions/setup-node@v3 - # with: - # node-version: 14 - # - uses: bahmutov/npm-install@v1 - # with: - # working-directory: .cdk - - uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 - - # - name: Deploy to AWS - # id: cdk_deploy - # run: yarn deploy - # working-directory: .cdk - uses: borales/actions-yarn@v3.0.0 - working-directory: ./lambdas with: cmd: install @@ -89,13 +29,84 @@ jobs: uses: Teakowa/serverless-action@master with: args: --stage prod deploy + + # deploy: + # runs-on: ubuntu-latest + # steps: + # - name: inject slug/short variables + # uses: rlespinasse/github-slug-action@v3.x + # - name: Set STAGE variable in environment for next steps + # run: echo "STAGE=pr-${{ github.event.number }}-${{ env.GITHUB_HEAD_REF_SLUG }}" >> $GITHUB_ENV + + # - name: Create Deployment + # uses: bobheadxi/deployments@v1 + # id: deployment + # with: + # step: start + # env: ${{ env.STAGE }} + # ref: ${{ github.head_ref }} + # override: true + + # - uses: actions/checkout@v3 + + # - name: Apply Staging Configuration + # run: | + # sed -i -e 's/^baseURL\s*=.*$/baseUrl = ""/i' config.toml + # echo "relativeurls = true" >>config.toml + # working-directory: src + + # - name: Copy packages.json summary from dist.tea.xyz + # uses: prewk/s3-cp-action@v2 + # with: + # aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }} + # aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + # source: 's3://dist.tea.xyz/mock_packages.json' + # dest: './src/data/packages.json' + + # - name: Create Package Detail Pages from packages.json + # uses: getneil/jq-action@v1 + # id: version + # with: + # cmd: '.github/build-package-pages.sh src/data/packages.json src/content/packages' + + # - run: .github/mk-pantry-accessible.sh ${{ secrets.TEMP_JACOBS_GITHUB_PAT }} + + # - uses: teaxyz/setup@v0 + # with: + # target: build + + # - name: Check for broken links + # uses: lycheeverse/lychee-action@v1 + # with: + # fail: true + # args: --verbose --no-progress './public/**/*.md' './public/**/*.html' + # env: + # GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + + # - uses: actions/setup-node@v3 + # with: + # node-version: 14 + # - uses: bahmutov/npm-install@v1 + # with: + # working-directory: .cdk + + # - uses: aws-actions/configure-aws-credentials@v1 + # with: + # aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + # aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + # aws-region: us-east-1 + + # - name: Deploy to AWS + # id: cdk_deploy + # run: yarn deploy + # working-directory: .cdk - # - name: Seal Deployment - # uses: bobheadxi/deployments@v1 - # if: always() - # with: - # step: finish - # status: ${{ job.status }} - # deployment_id: ${{ steps.deployment.outputs.deployment_id }} - # env: ${{ env.STAGE }} - # env_url: ${{ steps.cdk_deploy.outputs.env_url }} + # - name: Seal Deployment + # uses: bobheadxi/deployments@v1 + # if: always() + # with: + # step: finish + # status: ${{ job.status }} + # deployment_id: ${{ steps.deployment.outputs.deployment_id }} + # env: ${{ env.STAGE }} + # env_url: ${{ steps.cdk_deploy.outputs.env_url }} From 5b3c26f1b05144b00411e703f792016c806e75e2 Mon Sep 17 00:00:00 2001 From: neil Date: Mon, 17 Oct 2022 20:42:48 +0800 Subject: [PATCH 05/37] rm working dir --- .github/workflows/staging.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index 71664de..62c8a5e 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -25,7 +25,6 @@ jobs: cmd: install - name: deploy - working-directory: ./lambdas uses: Teakowa/serverless-action@master with: args: --stage prod deploy From 3eebae19a933f8f69df7a657391b9480f4e888dd Mon Sep 17 00:00:00 2001 From: neil Date: Mon, 17 Oct 2022 20:48:34 +0800 Subject: [PATCH 06/37] explicit change dir --- .github/workflows/staging.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index 62c8a5e..6ae0ae8 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -22,12 +22,13 @@ jobs: - uses: borales/actions-yarn@v3.0.0 with: - cmd: install - - - name: deploy - uses: Teakowa/serverless-action@master + cmd: --cwd lambdas install + + - name: serverless deploy + uses: serverless/github-action@v3 with: - args: --stage prod deploy + args: -c "cd ./lambdas && serverless deploy" + entrypoint: /bin/sh # deploy: # runs-on: ubuntu-latest From 5379263e14277d36b10a5af68e82fcdfa88e7bb9 Mon Sep 17 00:00:00 2001 From: neil Date: Mon, 17 Oct 2022 20:51:12 +0800 Subject: [PATCH 07/37] make relative path --- .github/workflows/staging.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index 6ae0ae8..bbe2781 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -22,7 +22,7 @@ jobs: - uses: borales/actions-yarn@v3.0.0 with: - cmd: --cwd lambdas install + cmd: --cwd ./lambdas install - name: serverless deploy uses: serverless/github-action@v3 From dd89e5f717c85b9a585f44e10915bc5d5d3dd2c2 Mon Sep 17 00:00:00 2001 From: neil Date: Mon, 17 Oct 2022 20:53:19 +0800 Subject: [PATCH 08/37] rm workdir --- .github/workflows/staging.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index bbe2781..a1cca31 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -10,9 +10,6 @@ env: jobs: deploy_sls: runs-on: ubuntu-latest - defaults: - run: - working-directory: ./lambdas steps: - uses: aws-actions/configure-aws-credentials@v1 with: From 54d21009f690e94c48e24263d5b0112aaf123032 Mon Sep 17 00:00:00 2001 From: neil Date: Mon, 17 Oct 2022 20:55:45 +0800 Subject: [PATCH 09/37] checkout the code --- .github/workflows/staging.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index a1cca31..bebeab7 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -11,6 +11,7 @@ jobs: deploy_sls: runs-on: ubuntu-latest steps: + - uses: actions/checkout@v3 - uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} From 7119323f73986189add8039b40ba284a86211465 Mon Sep 17 00:00:00 2001 From: neil Date: Tue, 18 Oct 2022 12:36:26 +0800 Subject: [PATCH 10/37] test workflow --- .github/workflows/staging.yml | 1 + lambdas/serverless.ts | 3 +++ lambdas/src/functions/hello/index.ts | 16 ++++++++-------- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index bebeab7..8885d24 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -6,6 +6,7 @@ concurrency: env: TEA_SECRET: ${{ secrets.TEA_SECRET }} + AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }} jobs: deploy_sls: diff --git a/lambdas/serverless.ts b/lambdas/serverless.ts index a8e7fdc..5a902e5 100644 --- a/lambdas/serverless.ts +++ b/lambdas/serverless.ts @@ -17,6 +17,9 @@ const serverlessConfiguration: AWS = { AWS_NODEJS_CONNECTION_REUSE_ENABLED: '1', NODE_OPTIONS: '--enable-source-maps --stack-trace-limit=1000', }, + iam: { + deploymentRole: `arn:aws:iam::${process.env.AWS_ACCOUNT_ID || '640264234305'}:role/CloudFormationExecutionRole` + } }, // import the function via paths functions: { hello }, diff --git a/lambdas/src/functions/hello/index.ts b/lambdas/src/functions/hello/index.ts index d9f4d47..daec01c 100644 --- a/lambdas/src/functions/hello/index.ts +++ b/lambdas/src/functions/hello/index.ts @@ -1,18 +1,18 @@ -import schema from './schema'; +// import schema from './schema'; import { handlerPath } from '@libs/handler-resolver'; export default { handler: `${handlerPath(__dirname)}/handler.main`, events: [ { - http: { + httpApi: { method: 'post', - path: 'hello', - request: { - schemas: { - 'application/json': schema, - }, - }, + path: '/hello', + // request: { + // schemas: { + // 'application/json': schema, + // }, + // }, }, }, ], From 9c760b9ec58a8c0153ee550c97a634c21af1dcee Mon Sep 17 00:00:00 2001 From: neil Date: Tue, 18 Oct 2022 12:46:27 +0800 Subject: [PATCH 11/37] add hello2 --- lambdas/serverless.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lambdas/serverless.ts b/lambdas/serverless.ts index 5a902e5..1abb7f5 100644 --- a/lambdas/serverless.ts +++ b/lambdas/serverless.ts @@ -22,7 +22,10 @@ const serverlessConfiguration: AWS = { } }, // import the function via paths - functions: { hello }, + functions: { + hello, + hello2: hello + }, package: { individually: true }, custom: { esbuild: { From d613daac08ef894c106c8d7e21bc9281a285d4e8 Mon Sep 17 00:00:00 2001 From: neil Date: Tue, 18 Oct 2022 12:51:54 +0800 Subject: [PATCH 12/37] add hello2 --- lambdas/serverless.ts | 3 ++- lambdas/src/functions/hello2/handler.ts | 14 ++++++++++++++ lambdas/src/functions/hello2/index.ts | 19 +++++++++++++++++++ lambdas/src/functions/hello2/mock.json | 6 ++++++ lambdas/src/functions/hello2/schema.ts | 7 +++++++ lambdas/src/functions/index.ts | 1 + 6 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 lambdas/src/functions/hello2/handler.ts create mode 100644 lambdas/src/functions/hello2/index.ts create mode 100644 lambdas/src/functions/hello2/mock.json create mode 100644 lambdas/src/functions/hello2/schema.ts diff --git a/lambdas/serverless.ts b/lambdas/serverless.ts index 1abb7f5..868c30c 100644 --- a/lambdas/serverless.ts +++ b/lambdas/serverless.ts @@ -1,6 +1,7 @@ import type { AWS } from '@serverless/typescript'; import hello from '@functions/hello'; +import hello2 from '@functions/hello2'; const serverlessConfiguration: AWS = { service: 'lambdas', @@ -24,7 +25,7 @@ const serverlessConfiguration: AWS = { // import the function via paths functions: { hello, - hello2: hello + hello2, }, package: { individually: true }, custom: { diff --git a/lambdas/src/functions/hello2/handler.ts b/lambdas/src/functions/hello2/handler.ts new file mode 100644 index 0000000..1236d25 --- /dev/null +++ b/lambdas/src/functions/hello2/handler.ts @@ -0,0 +1,14 @@ +import type { ValidatedEventAPIGatewayProxyEvent } from '@libs/api-gateway'; +import { formatJSONResponse } from '@libs/api-gateway'; +import { middyfy } from '@libs/lambda'; + +import schema from './schema'; + +const hello: ValidatedEventAPIGatewayProxyEvent = async (event) => { + return formatJSONResponse({ + message: `Hello ${event.body.name}, welcome to the exciting Serverless world!`, + event, + }); +}; + +export const main = middyfy(hello); diff --git a/lambdas/src/functions/hello2/index.ts b/lambdas/src/functions/hello2/index.ts new file mode 100644 index 0000000..0ae1a1e --- /dev/null +++ b/lambdas/src/functions/hello2/index.ts @@ -0,0 +1,19 @@ +// import schema from './schema'; +import { handlerPath } from '@libs/handler-resolver'; + +export default { + handler: `${handlerPath(__dirname)}/handler.main`, + events: [ + { + httpApi: { + method: 'put', + path: '/hello2', + // request: { + // schemas: { + // 'application/json': schema, + // }, + // }, + }, + }, + ], +}; diff --git a/lambdas/src/functions/hello2/mock.json b/lambdas/src/functions/hello2/mock.json new file mode 100644 index 0000000..6b1c818 --- /dev/null +++ b/lambdas/src/functions/hello2/mock.json @@ -0,0 +1,6 @@ +{ + "headers": { + "Content-Type": "application/json" + }, + "body": "{\"name\": \"Frederic\"}" +} diff --git a/lambdas/src/functions/hello2/schema.ts b/lambdas/src/functions/hello2/schema.ts new file mode 100644 index 0000000..1ab6f41 --- /dev/null +++ b/lambdas/src/functions/hello2/schema.ts @@ -0,0 +1,7 @@ +export default { + type: "object", + properties: { + name: { type: 'string' } + }, + required: ['name'] +} as const; diff --git a/lambdas/src/functions/index.ts b/lambdas/src/functions/index.ts index 109c3d4..5b615d8 100644 --- a/lambdas/src/functions/index.ts +++ b/lambdas/src/functions/index.ts @@ -1 +1,2 @@ export { default as hello } from './hello'; +export { default as hello2 } from './hello2'; \ No newline at end of file From 7b85af805c831af3e125d84d7798fdad57839f16 Mon Sep 17 00:00:00 2001 From: neil Date: Tue, 18 Oct 2022 13:31:32 +0800 Subject: [PATCH 13/37] try write --- lambdas/package.json | 5 +++-- lambdas/src/functions/hello/handler.ts | 31 ++++++++++++++++++++++++++ lambdas/tsconfig.json | 3 ++- lambdas/yarn.lock | 16 +++++++++++++ 4 files changed, 52 insertions(+), 3 deletions(-) diff --git a/lambdas/package.json b/lambdas/package.json index 43d554b..633fdf4 100644 --- a/lambdas/package.json +++ b/lambdas/package.json @@ -11,7 +11,8 @@ }, "dependencies": { "@middy/core": "^3.4.0", - "@middy/http-json-body-parser": "^3.4.0" + "@middy/http-json-body-parser": "^3.4.0", + "aws-sdk": "^2.1234.0" }, "devDependencies": { "@serverless/typescript": "^3.0.0", @@ -27,4 +28,4 @@ }, "author": "The serverless webpack authors (https://github.com/elastic-coders/serverless-webpack)", "license": "MIT" -} \ No newline at end of file +} diff --git a/lambdas/src/functions/hello/handler.ts b/lambdas/src/functions/hello/handler.ts index 1236d25..709f6fa 100644 --- a/lambdas/src/functions/hello/handler.ts +++ b/lambdas/src/functions/hello/handler.ts @@ -4,11 +4,42 @@ import { middyfy } from '@libs/lambda'; import schema from './schema'; +import AWS from 'aws-sdk/global'; +import S3 from 'aws-sdk/clients/s3'; +const s3 = new S3(); + const hello: ValidatedEventAPIGatewayProxyEvent = async (event) => { + await writeData(); return formatJSONResponse({ message: `Hello ${event.body.name}, welcome to the exciting Serverless world!`, event, }); }; + +const writeData = async () => { + try { + + const obj = { + firstname: "Navjot", + lastname: "Dhanawat" + }; + + const buf = Buffer.from(JSON.stringify(obj)); + + const data = { + Bucket: 'mockdist.tea.xyz', + Key: 'packages.json', + Body: buf, + ContentEncoding: 'base64', + ContentType: 'application/json', + ACL: 'public-read' + }; + + await s3.upload(data); + } catch (error) { + console.error(error); + } +} + export const main = middyfy(hello); diff --git a/lambdas/tsconfig.json b/lambdas/tsconfig.json index 896f946..8e652e8 100644 --- a/lambdas/tsconfig.json +++ b/lambdas/tsconfig.json @@ -8,7 +8,8 @@ "removeComments": true, "sourceMap": true, "target": "ES2020", - "outDir": "lib" + "outDir": "lib", + "allowSyntheticDefaultImports": true }, "include": ["src/**/*.ts", "serverless.ts"], "exclude": [ diff --git a/lambdas/yarn.lock b/lambdas/yarn.lock index d2f8a7b..ae0233b 100644 --- a/lambdas/yarn.lock +++ b/lambdas/yarn.lock @@ -457,6 +457,22 @@ aws-sdk@^2.1231.0: uuid "8.0.0" xml2js "0.4.19" +aws-sdk@^2.1234.0: + version "2.1234.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1234.0.tgz#2a3883295c77c789f8a95fbadc0fd37a998ac026" + integrity sha512-QFuSeYM8DPiXytspLnWToy4MWJPGYFCgAy4hi+lRd6ueJtCey7MBIgFNHW814uAJzKUDEdJUJZPvDZvtLM1d/Q== + dependencies: + buffer "4.9.2" + events "1.1.1" + ieee754 "1.1.13" + jmespath "0.16.0" + querystring "0.2.0" + sax "1.2.1" + url "0.10.3" + util "^0.12.4" + uuid "8.0.0" + xml2js "0.4.19" + axios@^0.21.1: version "0.21.4" resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" From 8a4e953e816b51ba4cadcaddc9184322d2bc7375 Mon Sep 17 00:00:00 2001 From: neil Date: Tue, 18 Oct 2022 13:40:46 +0800 Subject: [PATCH 14/37] test write --- lambdas/serverless.ts | 2 -- lambdas/src/functions/hello/handler.ts | 2 ++ lambdas/src/functions/hello2/handler.ts | 14 -------------- lambdas/src/functions/hello2/index.ts | 19 ------------------- lambdas/src/functions/hello2/mock.json | 6 ------ lambdas/src/functions/hello2/schema.ts | 7 ------- lambdas/src/functions/index.ts | 3 +-- 7 files changed, 3 insertions(+), 50 deletions(-) delete mode 100644 lambdas/src/functions/hello2/handler.ts delete mode 100644 lambdas/src/functions/hello2/index.ts delete mode 100644 lambdas/src/functions/hello2/mock.json delete mode 100644 lambdas/src/functions/hello2/schema.ts diff --git a/lambdas/serverless.ts b/lambdas/serverless.ts index 868c30c..8ae0c4c 100644 --- a/lambdas/serverless.ts +++ b/lambdas/serverless.ts @@ -1,7 +1,6 @@ import type { AWS } from '@serverless/typescript'; import hello from '@functions/hello'; -import hello2 from '@functions/hello2'; const serverlessConfiguration: AWS = { service: 'lambdas', @@ -25,7 +24,6 @@ const serverlessConfiguration: AWS = { // import the function via paths functions: { hello, - hello2, }, package: { individually: true }, custom: { diff --git a/lambdas/src/functions/hello/handler.ts b/lambdas/src/functions/hello/handler.ts index 709f6fa..2ac1bdf 100644 --- a/lambdas/src/functions/hello/handler.ts +++ b/lambdas/src/functions/hello/handler.ts @@ -19,6 +19,7 @@ const hello: ValidatedEventAPIGatewayProxyEvent = async (event) = const writeData = async () => { try { + console.log("uploading!") const obj = { firstname: "Navjot", @@ -37,6 +38,7 @@ const writeData = async () => { }; await s3.upload(data); + console.log("uploaded!") } catch (error) { console.error(error); } diff --git a/lambdas/src/functions/hello2/handler.ts b/lambdas/src/functions/hello2/handler.ts deleted file mode 100644 index 1236d25..0000000 --- a/lambdas/src/functions/hello2/handler.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { ValidatedEventAPIGatewayProxyEvent } from '@libs/api-gateway'; -import { formatJSONResponse } from '@libs/api-gateway'; -import { middyfy } from '@libs/lambda'; - -import schema from './schema'; - -const hello: ValidatedEventAPIGatewayProxyEvent = async (event) => { - return formatJSONResponse({ - message: `Hello ${event.body.name}, welcome to the exciting Serverless world!`, - event, - }); -}; - -export const main = middyfy(hello); diff --git a/lambdas/src/functions/hello2/index.ts b/lambdas/src/functions/hello2/index.ts deleted file mode 100644 index 0ae1a1e..0000000 --- a/lambdas/src/functions/hello2/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -// import schema from './schema'; -import { handlerPath } from '@libs/handler-resolver'; - -export default { - handler: `${handlerPath(__dirname)}/handler.main`, - events: [ - { - httpApi: { - method: 'put', - path: '/hello2', - // request: { - // schemas: { - // 'application/json': schema, - // }, - // }, - }, - }, - ], -}; diff --git a/lambdas/src/functions/hello2/mock.json b/lambdas/src/functions/hello2/mock.json deleted file mode 100644 index 6b1c818..0000000 --- a/lambdas/src/functions/hello2/mock.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "headers": { - "Content-Type": "application/json" - }, - "body": "{\"name\": \"Frederic\"}" -} diff --git a/lambdas/src/functions/hello2/schema.ts b/lambdas/src/functions/hello2/schema.ts deleted file mode 100644 index 1ab6f41..0000000 --- a/lambdas/src/functions/hello2/schema.ts +++ /dev/null @@ -1,7 +0,0 @@ -export default { - type: "object", - properties: { - name: { type: 'string' } - }, - required: ['name'] -} as const; diff --git a/lambdas/src/functions/index.ts b/lambdas/src/functions/index.ts index 5b615d8..76f5b4e 100644 --- a/lambdas/src/functions/index.ts +++ b/lambdas/src/functions/index.ts @@ -1,2 +1 @@ -export { default as hello } from './hello'; -export { default as hello2 } from './hello2'; \ No newline at end of file +export { default as hello } from './hello'; \ No newline at end of file From 4c26e337288cca5370da65c1a1209b4241fb9153 Mon Sep 17 00:00:00 2001 From: neil Date: Tue, 18 Oct 2022 13:50:34 +0800 Subject: [PATCH 15/37] promise s3 upload --- lambdas/src/functions/hello/handler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lambdas/src/functions/hello/handler.ts b/lambdas/src/functions/hello/handler.ts index 2ac1bdf..112d3d9 100644 --- a/lambdas/src/functions/hello/handler.ts +++ b/lambdas/src/functions/hello/handler.ts @@ -37,7 +37,7 @@ const writeData = async () => { ACL: 'public-read' }; - await s3.upload(data); + await s3.upload(data).promise(); console.log("uploaded!") } catch (error) { console.error(error); From a2d017c4222c6459ec07f717027eced1c3f0baff Mon Sep 17 00:00:00 2001 From: neil Date: Tue, 18 Oct 2022 14:07:24 +0800 Subject: [PATCH 16/37] add s3 upload permission --- lambdas/serverless.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/lambdas/serverless.ts b/lambdas/serverless.ts index 8ae0c4c..0383fc9 100644 --- a/lambdas/serverless.ts +++ b/lambdas/serverless.ts @@ -16,9 +16,23 @@ const serverlessConfiguration: AWS = { environment: { AWS_NODEJS_CONNECTION_REUSE_ENABLED: '1', NODE_OPTIONS: '--enable-source-maps --stack-trace-limit=1000', + AWS_DIST_BUCKET: '', }, iam: { - deploymentRole: `arn:aws:iam::${process.env.AWS_ACCOUNT_ID || '640264234305'}:role/CloudFormationExecutionRole` + deploymentRole: `arn:aws:iam::${process.env.AWS_ACCOUNT_ID || '640264234305'}:role/CloudFormationExecutionRole`, + role: { + statements: [ + { + "Effect": "Allow", + "Resource": `arn:aws:s3:::mockdist.tea.xyz`, + "Action": [ + "s3:Get*", + "s3:List*", + "s3:PutObject" + ] + } + ] + } } }, // import the function via paths From 9963e5cef77140bfaeeb148f77773be545af82b0 Mon Sep 17 00:00:00 2001 From: neil Date: Tue, 18 Oct 2022 14:17:42 +0800 Subject: [PATCH 17/37] putObject action --- lambdas/src/functions/hello/handler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lambdas/src/functions/hello/handler.ts b/lambdas/src/functions/hello/handler.ts index 112d3d9..ed0a279 100644 --- a/lambdas/src/functions/hello/handler.ts +++ b/lambdas/src/functions/hello/handler.ts @@ -37,7 +37,7 @@ const writeData = async () => { ACL: 'public-read' }; - await s3.upload(data).promise(); + await s3.putObject(data).promise(); console.log("uploaded!") } catch (error) { console.error(error); From 29c58a71e9e2daf80ab7e65af684cf18a9e8330c Mon Sep 17 00:00:00 2001 From: neil Date: Tue, 18 Oct 2022 14:38:02 +0800 Subject: [PATCH 18/37] fix permission --- lambdas/serverless.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lambdas/serverless.ts b/lambdas/serverless.ts index 0383fc9..d9012d4 100644 --- a/lambdas/serverless.ts +++ b/lambdas/serverless.ts @@ -24,7 +24,10 @@ const serverlessConfiguration: AWS = { statements: [ { "Effect": "Allow", - "Resource": `arn:aws:s3:::mockdist.tea.xyz`, + "Resource": [ + "arn:aws:s3:::mockdist.tea.xyz/*", + "arn:aws:s3:::mockdist.tea.xyz/*/*", + ], "Action": [ "s3:Get*", "s3:List*", From 97949f716b0e3572c8b26aa663121df32df97ead Mon Sep 17 00:00:00 2001 From: neil Date: Tue, 18 Oct 2022 14:51:19 +0800 Subject: [PATCH 19/37] remove acl --- lambdas/src/functions/hello/handler.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lambdas/src/functions/hello/handler.ts b/lambdas/src/functions/hello/handler.ts index ed0a279..18d094e 100644 --- a/lambdas/src/functions/hello/handler.ts +++ b/lambdas/src/functions/hello/handler.ts @@ -33,8 +33,7 @@ const writeData = async () => { Key: 'packages.json', Body: buf, ContentEncoding: 'base64', - ContentType: 'application/json', - ACL: 'public-read' + ContentType: 'application/json' }; await s3.putObject(data).promise(); From 06963f2202100a525bc5717acf7bcb2da27b5f0f Mon Sep 17 00:00:00 2001 From: neil Date: Tue, 18 Oct 2022 15:22:50 +0800 Subject: [PATCH 20/37] test internet access --- lambdas/package.json | 3 +- lambdas/serverless.ts | 2 +- .../src/functions/buildPackages/handler.ts | 37 +++++++++++++++ .../{hello => buildPackages}/index.ts | 0 .../{hello => buildPackages}/mock.json | 0 .../{hello => buildPackages}/schema.ts | 0 lambdas/src/functions/hello/handler.ts | 46 ------------------- lambdas/src/functions/index.ts | 2 +- lambdas/src/libs/types.ts | 11 +++++ lambdas/yarn.lock | 16 ++++++- 10 files changed, 67 insertions(+), 50 deletions(-) create mode 100644 lambdas/src/functions/buildPackages/handler.ts rename lambdas/src/functions/{hello => buildPackages}/index.ts (100%) rename lambdas/src/functions/{hello => buildPackages}/mock.json (100%) rename lambdas/src/functions/{hello => buildPackages}/schema.ts (100%) delete mode 100644 lambdas/src/functions/hello/handler.ts create mode 100644 lambdas/src/libs/types.ts diff --git a/lambdas/package.json b/lambdas/package.json index 633fdf4..490e055 100644 --- a/lambdas/package.json +++ b/lambdas/package.json @@ -12,7 +12,8 @@ "dependencies": { "@middy/core": "^3.4.0", "@middy/http-json-body-parser": "^3.4.0", - "aws-sdk": "^2.1234.0" + "aws-sdk": "^2.1234.0", + "axios": "^1.1.3" }, "devDependencies": { "@serverless/typescript": "^3.0.0", diff --git a/lambdas/serverless.ts b/lambdas/serverless.ts index d9012d4..4f05fdd 100644 --- a/lambdas/serverless.ts +++ b/lambdas/serverless.ts @@ -1,6 +1,6 @@ import type { AWS } from '@serverless/typescript'; -import hello from '@functions/hello'; +import hello from '@functions/buildPackages'; const serverlessConfiguration: AWS = { service: 'lambdas', diff --git a/lambdas/src/functions/buildPackages/handler.ts b/lambdas/src/functions/buildPackages/handler.ts new file mode 100644 index 0000000..a5d44ec --- /dev/null +++ b/lambdas/src/functions/buildPackages/handler.ts @@ -0,0 +1,37 @@ +import { middyfy } from '@libs/lambda'; + +import type { Package } from '@libs/types'; +import axios from 'axios'; + +import S3 from 'aws-sdk/clients/s3'; +const s3 = new S3(); + + +const buildPackages = async (event) => { + try { + const {data} = await axios.get('https://mocki.io/v1/e289a4b4-3199-49f8-80a4-fcec70c74fdf'); + await writePackagesData(data); + } catch (error) { + console.error(error); + } +}; + + +const writePackagesData = async (packages: any[]) => { + console.log("uploading!") + + const buf = Buffer.from(JSON.stringify(packages)); + + const data = { + Bucket: 'mockdist.tea.xyz', + Key: 'packages.json', + Body: buf, + ContentEncoding: 'base64', + ContentType: 'application/json' + }; + + await s3.putObject(data).promise(); + console.log("uploaded!") +} + +export const main = middyfy(buildPackages); diff --git a/lambdas/src/functions/hello/index.ts b/lambdas/src/functions/buildPackages/index.ts similarity index 100% rename from lambdas/src/functions/hello/index.ts rename to lambdas/src/functions/buildPackages/index.ts diff --git a/lambdas/src/functions/hello/mock.json b/lambdas/src/functions/buildPackages/mock.json similarity index 100% rename from lambdas/src/functions/hello/mock.json rename to lambdas/src/functions/buildPackages/mock.json diff --git a/lambdas/src/functions/hello/schema.ts b/lambdas/src/functions/buildPackages/schema.ts similarity index 100% rename from lambdas/src/functions/hello/schema.ts rename to lambdas/src/functions/buildPackages/schema.ts diff --git a/lambdas/src/functions/hello/handler.ts b/lambdas/src/functions/hello/handler.ts deleted file mode 100644 index 18d094e..0000000 --- a/lambdas/src/functions/hello/handler.ts +++ /dev/null @@ -1,46 +0,0 @@ -import type { ValidatedEventAPIGatewayProxyEvent } from '@libs/api-gateway'; -import { formatJSONResponse } from '@libs/api-gateway'; -import { middyfy } from '@libs/lambda'; - -import schema from './schema'; - -import AWS from 'aws-sdk/global'; -import S3 from 'aws-sdk/clients/s3'; -const s3 = new S3(); - -const hello: ValidatedEventAPIGatewayProxyEvent = async (event) => { - await writeData(); - return formatJSONResponse({ - message: `Hello ${event.body.name}, welcome to the exciting Serverless world!`, - event, - }); -}; - - -const writeData = async () => { - try { - console.log("uploading!") - - const obj = { - firstname: "Navjot", - lastname: "Dhanawat" - }; - - const buf = Buffer.from(JSON.stringify(obj)); - - const data = { - Bucket: 'mockdist.tea.xyz', - Key: 'packages.json', - Body: buf, - ContentEncoding: 'base64', - ContentType: 'application/json' - }; - - await s3.putObject(data).promise(); - console.log("uploaded!") - } catch (error) { - console.error(error); - } -} - -export const main = middyfy(hello); diff --git a/lambdas/src/functions/index.ts b/lambdas/src/functions/index.ts index 76f5b4e..e3e51a3 100644 --- a/lambdas/src/functions/index.ts +++ b/lambdas/src/functions/index.ts @@ -1 +1 @@ -export { default as hello } from './hello'; \ No newline at end of file +export { default as hello } from './buildPackages'; \ No newline at end of file diff --git a/lambdas/src/libs/types.ts b/lambdas/src/libs/types.ts new file mode 100644 index 0000000..72f0485 --- /dev/null +++ b/lambdas/src/libs/types.ts @@ -0,0 +1,11 @@ +export interface Package { + name: string; + full_name: string; + slug: string; + desc: string; + homepage: string; + version: string; + installs: number; + maintainer: string; + thumb_image_url: string; +} \ No newline at end of file diff --git a/lambdas/yarn.lock b/lambdas/yarn.lock index ae0233b..651ad2d 100644 --- a/lambdas/yarn.lock +++ b/lambdas/yarn.lock @@ -480,6 +480,15 @@ axios@^0.21.1: dependencies: follow-redirects "^1.14.0" +axios@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.1.3.tgz#8274250dada2edf53814ed7db644b9c2866c1e35" + integrity sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -1426,7 +1435,7 @@ flat@^5.0.2: resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -follow-redirects@^1.14.0: +follow-redirects@^1.14.0, follow-redirects@^1.15.0: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== @@ -2570,6 +2579,11 @@ promise-queue@^2.2.5: resolved "https://registry.yarnpkg.com/promise-queue/-/promise-queue-2.2.5.tgz#2f6f5f7c0f6d08109e967659c79b88a9ed5e93b4" integrity sha512-p/iXrPSVfnqPft24ZdNNLECw/UrtLTpT3jpAAMzl/o5/rDsGCPo3/CQS2611flL6LkoEJ3oQZw7C8Q80ZISXRQ== +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" From 972969651be6c1ca8787c032ef7bb7ae57320f7f Mon Sep 17 00:00:00 2001 From: neil Date: Tue, 18 Oct 2022 15:29:08 +0800 Subject: [PATCH 21/37] rename --- lambdas/serverless.ts | 4 ++-- lambdas/src/functions/buildPackages/handler.ts | 6 +++--- lambdas/src/functions/buildPackages/index.ts | 14 +------------- lambdas/src/functions/index.ts | 2 +- 4 files changed, 7 insertions(+), 19 deletions(-) diff --git a/lambdas/serverless.ts b/lambdas/serverless.ts index 4f05fdd..da02293 100644 --- a/lambdas/serverless.ts +++ b/lambdas/serverless.ts @@ -1,6 +1,6 @@ import type { AWS } from '@serverless/typescript'; -import hello from '@functions/buildPackages'; +import buildPackages from '@functions/buildPackages'; const serverlessConfiguration: AWS = { service: 'lambdas', @@ -40,7 +40,7 @@ const serverlessConfiguration: AWS = { }, // import the function via paths functions: { - hello, + buildPackages, }, package: { individually: true }, custom: { diff --git a/lambdas/src/functions/buildPackages/handler.ts b/lambdas/src/functions/buildPackages/handler.ts index a5d44ec..189804a 100644 --- a/lambdas/src/functions/buildPackages/handler.ts +++ b/lambdas/src/functions/buildPackages/handler.ts @@ -10,14 +10,14 @@ const s3 = new S3(); const buildPackages = async (event) => { try { const {data} = await axios.get('https://mocki.io/v1/e289a4b4-3199-49f8-80a4-fcec70c74fdf'); - await writePackagesData(data); + await writePackagesData(data as Package[]); } catch (error) { console.error(error); } }; -const writePackagesData = async (packages: any[]) => { +const writePackagesData = async (packages: Package[]) => { console.log("uploading!") const buf = Buffer.from(JSON.stringify(packages)); @@ -34,4 +34,4 @@ const writePackagesData = async (packages: any[]) => { console.log("uploaded!") } -export const main = middyfy(buildPackages); +export const main = buildPackages; diff --git a/lambdas/src/functions/buildPackages/index.ts b/lambdas/src/functions/buildPackages/index.ts index daec01c..587b9fd 100644 --- a/lambdas/src/functions/buildPackages/index.ts +++ b/lambdas/src/functions/buildPackages/index.ts @@ -3,17 +3,5 @@ import { handlerPath } from '@libs/handler-resolver'; export default { handler: `${handlerPath(__dirname)}/handler.main`, - events: [ - { - httpApi: { - method: 'post', - path: '/hello', - // request: { - // schemas: { - // 'application/json': schema, - // }, - // }, - }, - }, - ], + events: [], }; diff --git a/lambdas/src/functions/index.ts b/lambdas/src/functions/index.ts index e3e51a3..b6deec6 100644 --- a/lambdas/src/functions/index.ts +++ b/lambdas/src/functions/index.ts @@ -1 +1 @@ -export { default as hello } from './buildPackages'; \ No newline at end of file +export { default as buildPackages } from './buildPackages'; \ No newline at end of file From 99da7951a376cbbe3add36dd0a4c277d40d3c343 Mon Sep 17 00:00:00 2001 From: neil Date: Tue, 18 Oct 2022 15:41:18 +0800 Subject: [PATCH 22/37] construct pseudo code --- .../src/functions/buildPackages/handler.ts | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/lambdas/src/functions/buildPackages/handler.ts b/lambdas/src/functions/buildPackages/handler.ts index 189804a..e21400d 100644 --- a/lambdas/src/functions/buildPackages/handler.ts +++ b/lambdas/src/functions/buildPackages/handler.ts @@ -7,17 +7,41 @@ import S3 from 'aws-sdk/clients/s3'; const s3 = new S3(); -const buildPackages = async (event) => { +const buildPackages = async () => { try { + /** + * + * const packages: Package[] = [] + * const insertToAirtable: Package[] = [] + * retrieve packages from IPFS + * + * or + * + * retrieve from S3 keys + * construct name, and version + * + * retrieve data from airtable + * check which packages have airtable match + * if AT.match + * packages.push(at.match) + * else + * search algolia index for a match + * if algolia.match + * packages.push(transform algolia.match) + * insertToAirtable(transform algolia.match) + * else + * // Yup, dont included to packages to be displayed in site + * insertToAirtable(); + */ const {data} = await axios.get('https://mocki.io/v1/e289a4b4-3199-49f8-80a4-fcec70c74fdf'); - await writePackagesData(data as Package[]); + await writePackagesToS3(data as Package[]); } catch (error) { console.error(error); } }; -const writePackagesData = async (packages: Package[]) => { +const writePackagesToS3 = async (packages: Package[]) => { console.log("uploading!") const buf = Buffer.from(JSON.stringify(packages)); From 186d96776decb662f3cbc781653025b3936f34c3 Mon Sep 17 00:00:00 2001 From: neil Date: Wed, 19 Oct 2022 07:06:55 +0800 Subject: [PATCH 23/37] test s3 bucket config --- lambdas/serverless.ts | 4 ++-- lambdas/src/functions/buildPackages/handler.ts | 4 ++-- lambdas/src/libs/types.ts | 3 ++- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/lambdas/serverless.ts b/lambdas/serverless.ts index da02293..4f714c3 100644 --- a/lambdas/serverless.ts +++ b/lambdas/serverless.ts @@ -25,8 +25,8 @@ const serverlessConfiguration: AWS = { { "Effect": "Allow", "Resource": [ - "arn:aws:s3:::mockdist.tea.xyz/*", - "arn:aws:s3:::mockdist.tea.xyz/*/*", + "arn:aws:s3:::dist.tea.xyz/*", + "arn:aws:s3:::dist.tea.xyz/*/*", ], "Action": [ "s3:Get*", diff --git a/lambdas/src/functions/buildPackages/handler.ts b/lambdas/src/functions/buildPackages/handler.ts index e21400d..cac2be6 100644 --- a/lambdas/src/functions/buildPackages/handler.ts +++ b/lambdas/src/functions/buildPackages/handler.ts @@ -47,8 +47,8 @@ const writePackagesToS3 = async (packages: Package[]) => { const buf = Buffer.from(JSON.stringify(packages)); const data = { - Bucket: 'mockdist.tea.xyz', - Key: 'packages.json', + Bucket: 'dist.tea.xyz', + Key: 'mock_packages.json', Body: buf, ContentEncoding: 'base64', ContentType: 'application/json' diff --git a/lambdas/src/libs/types.ts b/lambdas/src/libs/types.ts index 72f0485..1a81be8 100644 --- a/lambdas/src/libs/types.ts +++ b/lambdas/src/libs/types.ts @@ -1,11 +1,12 @@ export interface Package { + slug: string; name: string; full_name: string; - slug: string; desc: string; homepage: string; version: string; installs: number; maintainer: string; thumb_image_url: string; + ipfs_content_id: string; } \ No newline at end of file From a26830e7daac94b1f3941b4a38242533ca89f86e Mon Sep 17 00:00:00 2001 From: neil Date: Wed, 19 Oct 2022 14:45:46 +0800 Subject: [PATCH 24/37] get unique package keys from s3 --- lambdas/package.json | 4 +- .../src/functions/buildPackages/handler.ts | 78 ++++++++++++++++++- lambdas/yarn.lock | 5 ++ 3 files changed, 82 insertions(+), 5 deletions(-) diff --git a/lambdas/package.json b/lambdas/package.json index 490e055..ac43c72 100644 --- a/lambdas/package.json +++ b/lambdas/package.json @@ -13,7 +13,9 @@ "@middy/core": "^3.4.0", "@middy/http-json-body-parser": "^3.4.0", "aws-sdk": "^2.1234.0", - "axios": "^1.1.3" + "axios": "^1.1.3", + "compare-versions": "^5.0.1", + "lodash": "^4.17.21" }, "devDependencies": { "@serverless/typescript": "^3.0.0", diff --git a/lambdas/src/functions/buildPackages/handler.ts b/lambdas/src/functions/buildPackages/handler.ts index cac2be6..c09439e 100644 --- a/lambdas/src/functions/buildPackages/handler.ts +++ b/lambdas/src/functions/buildPackages/handler.ts @@ -1,11 +1,23 @@ -import { middyfy } from '@libs/lambda'; - import type { Package } from '@libs/types'; +import _ from 'lodash'; import axios from 'axios'; +import { compareVersions, validate } from 'compare-versions'; import S3 from 'aws-sdk/clients/s3'; const s3 = new S3(); +const Bucket = 'dist.tea.xyz'; + +interface S3Package { + version: string, + full_name: string, + name: string, + maintainer: string, + homepage: string, + // key: string, + last_modified: Date, +} + const buildPackages = async () => { try { @@ -33,14 +45,72 @@ const buildPackages = async () => { * // Yup, dont included to packages to be displayed in site * insertToAirtable(); */ - const {data} = await axios.get('https://mocki.io/v1/e289a4b4-3199-49f8-80a4-fcec70c74fdf'); - await writePackagesToS3(data as Package[]); + const allS3Packages = await getAllS3Packages(); + console.log(allS3Packages); } catch (error) { console.error(error); } }; +const getAllS3Packages = async (): Promise => { + const allS3PackagesWithDups = await getKeysFromS3(); + + const sortedByVersion = allS3PackagesWithDups + .sort((a, b) => compareVersions(a.version, b.version)) + .reverse(); + + const uniquePackages = _(sortedByVersion) + .uniqBy('name') + .value(); + + return uniquePackages; +} + +const getKeysFromS3 = async (ContinuationToken?: string) : Promise => { + const res = await s3.listObjectsV2({ + Bucket, + MaxKeys: 2147483647, + ...(ContinuationToken ? { ContinuationToken } : {}), + }).promise(); + + const s3Packages: S3Package[] = res.Contents + .filter((data: S3.Object) => data.Key.split('/').length >= 2) + .map(convertS3ContentTOS3Package); + + if (res.IsTruncated && res.NextContinuationToken) { + const nextPackages = await getKeysFromS3(res.NextContinuationToken); + s3Packages.push(...nextPackages); + } + + return s3Packages.filter((p) => validate(p.version)); +} + +const convertS3ContentTOS3Package = (data: S3.Object) : S3Package => { + const pathElements = data.Key.replace('github.com/', '').split('/'); + const [rawVersion] = pathElements.pop().split('.tar'); + const version = rawVersion.replace('v', '') + .replace('.sha256sum','') + .replace('ersions.txt', ''); + + const [maintainerOrPackageName, packageName] = pathElements; + const isMaintainer = !packageName ? false : + !['linux','darwin'].includes(packageName); + + return { + name: isMaintainer ? packageName : maintainerOrPackageName, + full_name: isMaintainer ? [maintainerOrPackageName, packageName].join('/') : '', + maintainer: isMaintainer ? maintainerOrPackageName : '', + version, + last_modified: data.LastModified, + homepage: getPossibleHomepage(maintainerOrPackageName) || getPossibleHomepage(packageName) || '' + } +} + +const getPossibleHomepage = (name: string) => { + return name && name.split('.').length > 1 ? `https://${name}` : '' +} + const writePackagesToS3 = async (packages: Package[]) => { console.log("uploading!") diff --git a/lambdas/yarn.lock b/lambdas/yarn.lock index 651ad2d..c894104 100644 --- a/lambdas/yarn.lock +++ b/lambdas/yarn.lock @@ -795,6 +795,11 @@ commander@~4.1.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== +compare-versions@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-5.0.1.tgz#14c6008436d994c3787aba38d4087fabe858555e" + integrity sha512-v8Au3l0b+Nwkp4G142JcgJFh1/TUhdxut7wzD1Nq1dyp5oa3tXaqb03EXOAB6jS4gMlalkjAUPZBMiAfKUixHQ== + component-emitter@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" From ec0c23f316c9f798aed454a32f1e2d4407b57401 Mon Sep 17 00:00:00 2001 From: neil Date: Wed, 19 Oct 2022 14:56:18 +0800 Subject: [PATCH 25/37] add permissions and slug data --- lambdas/serverless.ts | 1 + lambdas/src/functions/buildPackages/handler.ts | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lambdas/serverless.ts b/lambdas/serverless.ts index 4f714c3..357f04b 100644 --- a/lambdas/serverless.ts +++ b/lambdas/serverless.ts @@ -31,6 +31,7 @@ const serverlessConfiguration: AWS = { "Action": [ "s3:Get*", "s3:List*", + "s3:ListBucket", "s3:PutObject" ] } diff --git a/lambdas/src/functions/buildPackages/handler.ts b/lambdas/src/functions/buildPackages/handler.ts index c09439e..d12b1aa 100644 --- a/lambdas/src/functions/buildPackages/handler.ts +++ b/lambdas/src/functions/buildPackages/handler.ts @@ -9,6 +9,7 @@ const s3 = new S3(); const Bucket = 'dist.tea.xyz'; interface S3Package { + slug: string, version: string, full_name: string, name: string, @@ -97,9 +98,12 @@ const convertS3ContentTOS3Package = (data: S3.Object) : S3Package => { const isMaintainer = !packageName ? false : !['linux','darwin'].includes(packageName); + const fullName = isMaintainer ? [maintainerOrPackageName, packageName].join('/') : maintainerOrPackageName; + return { + slug: fullName.replace(/[^\w\s]/gi, '_').toLocaleLowerCase(), name: isMaintainer ? packageName : maintainerOrPackageName, - full_name: isMaintainer ? [maintainerOrPackageName, packageName].join('/') : '', + full_name: fullName, maintainer: isMaintainer ? maintainerOrPackageName : '', version, last_modified: data.LastModified, From 1e43655ca4d72777a3cf6c0c7704114c39621080 Mon Sep 17 00:00:00 2001 From: neil Date: Wed, 19 Oct 2022 15:05:15 +0800 Subject: [PATCH 26/37] set permission test --- lambdas/serverless.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lambdas/serverless.ts b/lambdas/serverless.ts index 357f04b..db532d9 100644 --- a/lambdas/serverless.ts +++ b/lambdas/serverless.ts @@ -25,12 +25,13 @@ const serverlessConfiguration: AWS = { { "Effect": "Allow", "Resource": [ + "arn:aws:s3:::dist.tea.xyz", "arn:aws:s3:::dist.tea.xyz/*", "arn:aws:s3:::dist.tea.xyz/*/*", ], "Action": [ - "s3:Get*", - "s3:List*", + "s3:GetBucketAcl", + "s3:List", "s3:ListBucket", "s3:PutObject" ] From 9b3bca569d225f5fcf8db4c05b43369fa95db04d Mon Sep 17 00:00:00 2001 From: neil Date: Wed, 19 Oct 2022 16:03:40 +0800 Subject: [PATCH 27/37] retrieve airtable packages --- lambdas/package.json | 1 + .../src/functions/buildPackages/handler.ts | 81 +++++++++++++++++-- lambdas/src/functions/buildPackages/index.ts | 5 ++ lambdas/yarn.lock | 30 ++++++- 4 files changed, 111 insertions(+), 6 deletions(-) diff --git a/lambdas/package.json b/lambdas/package.json index ac43c72..32980fa 100644 --- a/lambdas/package.json +++ b/lambdas/package.json @@ -12,6 +12,7 @@ "dependencies": { "@middy/core": "^3.4.0", "@middy/http-json-body-parser": "^3.4.0", + "airtable": "^0.11.5", "aws-sdk": "^2.1234.0", "axios": "^1.1.3", "compare-versions": "^5.0.1", diff --git a/lambdas/src/functions/buildPackages/handler.ts b/lambdas/src/functions/buildPackages/handler.ts index d12b1aa..a9afe28 100644 --- a/lambdas/src/functions/buildPackages/handler.ts +++ b/lambdas/src/functions/buildPackages/handler.ts @@ -4,9 +4,15 @@ import axios from 'axios'; import { compareVersions, validate } from 'compare-versions'; import S3 from 'aws-sdk/clients/s3'; +import { base } from 'airtable'; + +// const atApiKey = 'keyKqvmHrsakIfqWg'; // set this to AIRTABLE_API_KEY env var + const s3 = new S3(); -const Bucket = 'dist.tea.xyz'; +const airtablePackagesBase = base(process.env.AIRTABLE_PACKAGES_BASE); + +const Bucket = process.env.AWS_DIST_BUCKET; interface S3Package { slug: string, @@ -16,9 +22,14 @@ interface S3Package { maintainer: string, homepage: string, // key: string, - last_modified: Date, + last_modified: Date | string, } +type AirtablePackage = S3Package & { + airtable_record_id: string, + thumb_image_url: string, + description: string, +} const buildPackages = async () => { try { @@ -46,8 +57,14 @@ const buildPackages = async () => { * // Yup, dont included to packages to be displayed in site * insertToAirtable(); */ - const allS3Packages = await getAllS3Packages(); - console.log(allS3Packages); + const [ + allS3Packages, + airtablePackages + ] = await Promise.all([ + getAllS3Packages(), + getAllAirtablePackages(), + ]); + } catch (error) { console.error(error); } @@ -115,7 +132,7 @@ const getPossibleHomepage = (name: string) => { return name && name.split('.').length > 1 ? `https://${name}` : '' } -const writePackagesToS3 = async (packages: Package[]) => { +const writePackagesToS3 = async (packages: S3Package[]) => { console.log("uploading!") const buf = Buffer.from(JSON.stringify(packages)); @@ -132,4 +149,58 @@ const writePackagesToS3 = async (packages: Package[]) => { console.log("uploaded!") } +const getAllAirtablePackages = async () : Promise => { + const allRecords = await airtablePackagesBase('packages') + .select({ + maxRecords: 100, + view: '_api' + }).all(); + + const packages: AirtablePackage[] = allRecords.map((record) => { + return { + airtable_record_id: record.id, + ..._.pick(record.fields, [ + 'slug', + 'homepage', + 'maintainer', + 'name', + 'version', + 'last_modified', + 'full_name', + ]), + description: record.fields?.description || '', + thumb_image_url: _.get(record.fields, 'thumb_image[0].url', '/Images/package-thumb-nolabel3.jpg') + } as AirtablePackage; + }); + /** + * // SAMPLE RECORD SHAPE w/ thumb_image is uploaded + { + slug: 'unicode_org', + name: 'unicode.org', + full_name: 'unicode.org', + homepage: 'https://unicode.org', + version: '71.1.1', + last_modified: '2022-09-26T19:46:25.000Z', + thumb_image: [ + { + id: 'attQVgaRUXOYinsWy', + width: 640, + height: 534, + url: 'https://dl.airtable.com/.attachments/f2465c36a0060919368e2f53305694f9/cfab76a8/gen-art-1.png', + filename: 'gen-art-1.png', + size: 184878, + type: 'image/png', + thumbnails: [Object] + } + ] + } + TODO IMAGE UPLOAD to S3/CDN: + if thumb_image_url is empty + get thumb_image data + upload to s3 + update thumb_image_url in airtable + */ + return packages; +} + export const main = buildPackages; diff --git a/lambdas/src/functions/buildPackages/index.ts b/lambdas/src/functions/buildPackages/index.ts index 587b9fd..a710627 100644 --- a/lambdas/src/functions/buildPackages/index.ts +++ b/lambdas/src/functions/buildPackages/index.ts @@ -4,4 +4,9 @@ import { handlerPath } from '@libs/handler-resolver'; export default { handler: `${handlerPath(__dirname)}/handler.main`, events: [], + environment: { + AIRTABLE_API_KEY: '${ssm:/airtable/api_key}', + AIRTABLE_PACKAGES_BASE: '${ssm:/airtable/packages_base}', + AWS_DIST_BUCKET: '${ssm:AW5_S3_BUCKET}' + } }; diff --git a/lambdas/yarn.lock b/lambdas/yarn.lock index c894104..b451469 100644 --- a/lambdas/yarn.lock +++ b/lambdas/yarn.lock @@ -272,7 +272,7 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.0.tgz#f38c7139247a1d619f6cc6f27b072606af7c289d" integrity sha512-IOXCvVRToe7e0ny7HpT/X9Rb2RYtElG1a+VshjwT00HxrM2dWBApHQoqsI6WiY7Q03vdf2bCrIGzVrkF/5t10w== -"@types/node@^14.14.25": +"@types/node@>=8.0.0 <15", "@types/node@^14.14.25": version "14.18.32" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.32.tgz#8074f7106731f1a12ba993fe8bad86ee73905014" integrity sha512-Y6S38pFr04yb13qqHf8uk1nHE3lXgQ30WZbv1mLliV9pt0NjvqdWttLcrOYLnXbOafknVYRHZGoMSpR9UwfYow== @@ -284,6 +284,18 @@ dependencies: "@types/node" "*" +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +abortcontroller-polyfill@^1.4.0: + version "1.7.5" + resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" + integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ== + acorn-walk@^8.1.1, acorn-walk@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" @@ -314,6 +326,17 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" +airtable@^0.11.5: + version "0.11.5" + resolved "https://registry.yarnpkg.com/airtable/-/airtable-0.11.5.tgz#eeac9b4bc7fef30663ca2c40153f7587920c2e02" + integrity sha512-/fqPA5BZTn5K0J636CfVuyGdNyV6t5RbBDPUBASlb/mlWSJj8WcF9O7/R+BuAlGMsSiKqR9dll99srcQcLEQjg== + dependencies: + "@types/node" ">=8.0.0 <15" + abort-controller "^3.0.0" + abortcontroller-polyfill "^1.4.0" + lodash "^4.17.21" + node-fetch "^2.6.7" + ajv-formats@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" @@ -1289,6 +1312,11 @@ event-emitter@^0.3.5: d "1" es5-ext "~0.10.14" +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + events@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" From 201fc97544fc69c8356fb699e5001130da3d4ace Mon Sep 17 00:00:00 2001 From: neil Date: Thu, 20 Oct 2022 07:29:55 +0800 Subject: [PATCH 28/37] initial merging of s3 packages data with airtable packages written into s3 --- .../src/functions/buildPackages/handler.ts | 228 ++++-------------- lambdas/src/libs/airtable.ts | 61 +++++ lambdas/src/libs/dist_tea_xyz.ts | 85 +++++++ lambdas/src/libs/types.ts | 31 ++- 4 files changed, 219 insertions(+), 186 deletions(-) create mode 100644 lambdas/src/libs/airtable.ts create mode 100644 lambdas/src/libs/dist_tea_xyz.ts diff --git a/lambdas/src/functions/buildPackages/handler.ts b/lambdas/src/functions/buildPackages/handler.ts index a9afe28..851c8d7 100644 --- a/lambdas/src/functions/buildPackages/handler.ts +++ b/lambdas/src/functions/buildPackages/handler.ts @@ -1,62 +1,14 @@ -import type { Package } from '@libs/types'; +import type { Package, AirtablePackage, S3Package } from '@libs/types'; import _ from 'lodash'; -import axios from 'axios'; -import { compareVersions, validate } from 'compare-versions'; -import S3 from 'aws-sdk/clients/s3'; -import { base } from 'airtable'; +import { getAllS3Packages, writePackagesToS3 } from '@libs/dist_tea_xyz'; +import { getAllAirtablePackages } from '@libs/airtable'; -// const atApiKey = 'keyKqvmHrsakIfqWg'; // set this to AIRTABLE_API_KEY env var +type NewAirtablePackage = Partial; -const s3 = new S3(); - -const airtablePackagesBase = base(process.env.AIRTABLE_PACKAGES_BASE); - -const Bucket = process.env.AWS_DIST_BUCKET; - -interface S3Package { - slug: string, - version: string, - full_name: string, - name: string, - maintainer: string, - homepage: string, - // key: string, - last_modified: Date | string, -} - -type AirtablePackage = S3Package & { - airtable_record_id: string, - thumb_image_url: string, - description: string, -} const buildPackages = async () => { try { - /** - * - * const packages: Package[] = [] - * const insertToAirtable: Package[] = [] - * retrieve packages from IPFS - * - * or - * - * retrieve from S3 keys - * construct name, and version - * - * retrieve data from airtable - * check which packages have airtable match - * if AT.match - * packages.push(at.match) - * else - * search algolia index for a match - * if algolia.match - * packages.push(transform algolia.match) - * insertToAirtable(transform algolia.match) - * else - * // Yup, dont included to packages to be displayed in site - * insertToAirtable(); - */ const [ allS3Packages, airtablePackages @@ -65,142 +17,68 @@ const buildPackages = async () => { getAllAirtablePackages(), ]); + const { + newPackages, + packagesJson, + } = await getFinalPackagesData(allS3Packages, airtablePackages); + + await writePackagesToS3(packagesJson); } catch (error) { console.error(error); } }; - -const getAllS3Packages = async (): Promise => { - const allS3PackagesWithDups = await getKeysFromS3(); - - const sortedByVersion = allS3PackagesWithDups - .sort((a, b) => compareVersions(a.version, b.version)) - .reverse(); - - const uniquePackages = _(sortedByVersion) - .uniqBy('name') - .value(); - - return uniquePackages; +interface FinalPackageOutput { + newPackages: NewAirtablePackage[], + packagesJson: Package[], } +interface AirtablePackageDict { + [slug: string]: AirtablePackage +} +const getFinalPackagesData = async (s3Packages: S3Package[], airtablePackages: AirtablePackage[]): Promise => { + const newPackages: NewAirtablePackage[] = []; + const packagesJson: Package[] = []; -const getKeysFromS3 = async (ContinuationToken?: string) : Promise => { - const res = await s3.listObjectsV2({ - Bucket, - MaxKeys: 2147483647, - ...(ContinuationToken ? { ContinuationToken } : {}), - }).promise(); + const airtablePackagesDict: AirtablePackageDict = airtablePackages.reduce( + (dict: AirtablePackageDict, p: AirtablePackage) => { + dict[p.slug] = p; + return dict; + }, + {} + ); - const s3Packages: S3Package[] = res.Contents - .filter((data: S3.Object) => data.Key.split('/').length >= 2) - .map(convertS3ContentTOS3Package); - - if (res.IsTruncated && res.NextContinuationToken) { - const nextPackages = await getKeysFromS3(res.NextContinuationToken); - s3Packages.push(...nextPackages); + for(const s3Package of s3Packages) { + const airtablePackage = airtablePackagesDict[s3Package.slug]; + if (airtablePackage) { + const finalPackage: Package = { + ...airtablePackage, + installs: 0, // temporary get this from tea db/ipfs eventually + thumb_image_url: airtablePackage.thumb_image_url || '/Images/package-thumb-nolabel4.jpg', + } + packagesJson.push(finalPackage); + } else { + const newPackage: NewAirtablePackage = { + ...s3Package, + // TODO: + desc: '', // get this from algolia + homepage: s3Package.homepage || '', // get from algolia + } + const tempPackage: Package = { + ...s3Package, + thumb_image_url: '', + desc: '', + installs: 0, + } + newPackages.push(newPackage); + packagesJson.push(tempPackage); + } } - return s3Packages.filter((p) => validate(p.version)); -} - -const convertS3ContentTOS3Package = (data: S3.Object) : S3Package => { - const pathElements = data.Key.replace('github.com/', '').split('/'); - const [rawVersion] = pathElements.pop().split('.tar'); - const version = rawVersion.replace('v', '') - .replace('.sha256sum','') - .replace('ersions.txt', ''); - - const [maintainerOrPackageName, packageName] = pathElements; - const isMaintainer = !packageName ? false : - !['linux','darwin'].includes(packageName); - - const fullName = isMaintainer ? [maintainerOrPackageName, packageName].join('/') : maintainerOrPackageName; - return { - slug: fullName.replace(/[^\w\s]/gi, '_').toLocaleLowerCase(), - name: isMaintainer ? packageName : maintainerOrPackageName, - full_name: fullName, - maintainer: isMaintainer ? maintainerOrPackageName : '', - version, - last_modified: data.LastModified, - homepage: getPossibleHomepage(maintainerOrPackageName) || getPossibleHomepage(packageName) || '' + newPackages, + packagesJson, } } -const getPossibleHomepage = (name: string) => { - return name && name.split('.').length > 1 ? `https://${name}` : '' -} - -const writePackagesToS3 = async (packages: S3Package[]) => { - console.log("uploading!") - - const buf = Buffer.from(JSON.stringify(packages)); - - const data = { - Bucket: 'dist.tea.xyz', - Key: 'mock_packages.json', - Body: buf, - ContentEncoding: 'base64', - ContentType: 'application/json' - }; - - await s3.putObject(data).promise(); - console.log("uploaded!") -} - -const getAllAirtablePackages = async () : Promise => { - const allRecords = await airtablePackagesBase('packages') - .select({ - maxRecords: 100, - view: '_api' - }).all(); - - const packages: AirtablePackage[] = allRecords.map((record) => { - return { - airtable_record_id: record.id, - ..._.pick(record.fields, [ - 'slug', - 'homepage', - 'maintainer', - 'name', - 'version', - 'last_modified', - 'full_name', - ]), - description: record.fields?.description || '', - thumb_image_url: _.get(record.fields, 'thumb_image[0].url', '/Images/package-thumb-nolabel3.jpg') - } as AirtablePackage; - }); - /** - * // SAMPLE RECORD SHAPE w/ thumb_image is uploaded - { - slug: 'unicode_org', - name: 'unicode.org', - full_name: 'unicode.org', - homepage: 'https://unicode.org', - version: '71.1.1', - last_modified: '2022-09-26T19:46:25.000Z', - thumb_image: [ - { - id: 'attQVgaRUXOYinsWy', - width: 640, - height: 534, - url: 'https://dl.airtable.com/.attachments/f2465c36a0060919368e2f53305694f9/cfab76a8/gen-art-1.png', - filename: 'gen-art-1.png', - size: 184878, - type: 'image/png', - thumbnails: [Object] - } - ] - } - TODO IMAGE UPLOAD to S3/CDN: - if thumb_image_url is empty - get thumb_image data - upload to s3 - update thumb_image_url in airtable - */ - return packages; -} export const main = buildPackages; diff --git a/lambdas/src/libs/airtable.ts b/lambdas/src/libs/airtable.ts new file mode 100644 index 0000000..bb78ec4 --- /dev/null +++ b/lambdas/src/libs/airtable.ts @@ -0,0 +1,61 @@ +import { base } from 'airtable'; +import _ from 'lodash'; +import type { AirtablePackage } from './types'; + + +const airtablePackagesBase = base(process.env.AIRTABLE_PACKAGES_BASE); + + +export const getAllAirtablePackages = async () : Promise => { + const allRecords = await airtablePackagesBase('packages') + .select({ + maxRecords: 100, + view: '_api' + }).all(); + + const packages: AirtablePackage[] = allRecords.map((record) => { + return { + airtable_record_id: record.id, + ..._.pick(record.fields, [ + 'slug', + 'homepage', + 'maintainer', + 'name', + 'version', + 'last_modified', + 'full_name', + ]), + desc: record.fields?.description || '', + thumb_image_url: _.get(record.fields, 'thumb_image[0].url', '/Images/package-thumb-nolabel3.jpg') + } as AirtablePackage; + }); + /** + * // SAMPLE RECORD SHAPE w/ thumb_image is uploaded + { + slug: 'unicode_org', + name: 'unicode.org', + full_name: 'unicode.org', + homepage: 'https://unicode.org', + version: '71.1.1', + last_modified: '2022-09-26T19:46:25.000Z', + thumb_image: [ + { + id: 'attQVgaRUXOYinsWy', + width: 640, + height: 534, + url: 'https://dl.airtable.com/.attachments/f2465c36a0060919368e2f53305694f9/cfab76a8/gen-art-1.png', + filename: 'gen-art-1.png', + size: 184878, + type: 'image/png', + thumbnails: [Object] + } + ] + } + TODO IMAGE UPLOAD to S3/CDN: + if thumb_image_url is empty + get thumb_image data + upload to s3 + update thumb_image_url in airtable + */ + return packages; +} \ No newline at end of file diff --git a/lambdas/src/libs/dist_tea_xyz.ts b/lambdas/src/libs/dist_tea_xyz.ts new file mode 100644 index 0000000..1a5c8ef --- /dev/null +++ b/lambdas/src/libs/dist_tea_xyz.ts @@ -0,0 +1,85 @@ +import S3 from 'aws-sdk/clients/s3'; +import { compareVersions, validate } from 'compare-versions'; + +import type { S3Package } from './types'; + +const Bucket = process.env.AWS_DIST_BUCKET; +const s3 = new S3(); + +export const getAllS3Packages = async (): Promise => { + const allS3PackagesWithDups = await getKeysFromS3(); + + const sortedByVersion = allS3PackagesWithDups + .sort((a, b) => compareVersions(a.version, b.version)) + .reverse(); + + const uniquePackages = _(sortedByVersion) + .uniqBy('name') + .value(); + + return uniquePackages; +} + +const getKeysFromS3 = async (ContinuationToken?: string) : Promise => { + const res = await s3.listObjectsV2({ + Bucket, + MaxKeys: 2147483647, + ...(ContinuationToken ? { ContinuationToken } : {}), + }).promise(); + + const s3Packages: S3Package[] = res.Contents + .filter((data: S3.Object) => data.Key.split('/').length >= 2) + .map(convertS3ContentTOS3Package); + + if (res.IsTruncated && res.NextContinuationToken) { + const nextPackages = await getKeysFromS3(res.NextContinuationToken); + s3Packages.push(...nextPackages); + } + + return s3Packages.filter((p) => validate(p.version)); +} + +const convertS3ContentTOS3Package = (data: S3.Object) : S3Package => { + const pathElements = data.Key.replace('github.com/', '').split('/'); + const [rawVersion] = pathElements.pop().split('.tar'); + const version = rawVersion.replace('v', '') + .replace('.sha256sum','') + .replace('ersions.txt', ''); + + const [maintainerOrPackageName, packageName] = pathElements; + const isMaintainer = !packageName ? false : + !['linux','darwin'].includes(packageName); + + const fullName = isMaintainer ? [maintainerOrPackageName, packageName].join('/') : maintainerOrPackageName; + + return { + slug: fullName.replace(/[^\w\s]/gi, '_').toLocaleLowerCase(), + name: isMaintainer ? packageName : maintainerOrPackageName, + full_name: fullName, + maintainer: isMaintainer ? maintainerOrPackageName : '', + version, + last_modified: data.LastModified, + homepage: getPossibleHomepage(maintainerOrPackageName) || getPossibleHomepage(packageName) || '' + } +} + +const getPossibleHomepage = (name: string) => { + return name && name.split('.').length > 1 ? `https://${name}` : '' +} + +export const writePackagesToS3 = async (packages: S3Package[]) => { + console.log("uploading!") + + const buf = Buffer.from(JSON.stringify(packages)); + + const data = { + Bucket: 'dist.tea.xyz', + Key: 'mock_packages.json', + Body: buf, + ContentEncoding: 'base64', + ContentType: 'application/json' + }; + + await s3.putObject(data).promise(); + console.log("uploaded!") +} \ No newline at end of file diff --git a/lambdas/src/libs/types.ts b/lambdas/src/libs/types.ts index 1a81be8..69c51a6 100644 --- a/lambdas/src/libs/types.ts +++ b/lambdas/src/libs/types.ts @@ -1,12 +1,21 @@ -export interface Package { - slug: string; - name: string; - full_name: string; - desc: string; - homepage: string; - version: string; - installs: number; - maintainer: string; - thumb_image_url: string; - ipfs_content_id: string; +export interface S3Package { + slug: string, + version: string, + full_name: string, + name: string, + maintainer: string, + homepage: string, + // key: string, + last_modified: Date | string, +} + +export type AirtablePackage = S3Package & { + airtable_record_id: string, + thumb_image_url: string, + desc: string, +} + +export type Package = Omit & { + airtable_record_id?: string, + installs: number, } \ No newline at end of file From c547eafe195c4392dc461064f31fe410ee3e16fa Mon Sep 17 00:00:00 2001 From: neil Date: Thu, 20 Oct 2022 08:53:27 +0800 Subject: [PATCH 29/37] fix types and default placeholder values --- lambdas/src/libs/airtable.ts | 103 ++++++++++++++++--------------- lambdas/src/libs/dist_tea_xyz.ts | 2 +- lambdas/src/libs/types.ts | 26 ++++---- 3 files changed, 66 insertions(+), 65 deletions(-) diff --git a/lambdas/src/libs/airtable.ts b/lambdas/src/libs/airtable.ts index bb78ec4..b267798 100644 --- a/lambdas/src/libs/airtable.ts +++ b/lambdas/src/libs/airtable.ts @@ -6,56 +6,57 @@ import type { AirtablePackage } from './types'; const airtablePackagesBase = base(process.env.AIRTABLE_PACKAGES_BASE); -export const getAllAirtablePackages = async () : Promise => { - const allRecords = await airtablePackagesBase('packages') - .select({ - maxRecords: 100, - view: '_api' - }).all(); +export const getAllAirtablePackages = async (): Promise => { + const allRecords = await airtablePackagesBase('packages') + .select({ + maxRecords: 100, + view: '_api' + }).all(); - const packages: AirtablePackage[] = allRecords.map((record) => { - return { - airtable_record_id: record.id, - ..._.pick(record.fields, [ - 'slug', - 'homepage', - 'maintainer', - 'name', - 'version', - 'last_modified', - 'full_name', - ]), - desc: record.fields?.description || '', - thumb_image_url: _.get(record.fields, 'thumb_image[0].url', '/Images/package-thumb-nolabel3.jpg') - } as AirtablePackage; - }); - /** - * // SAMPLE RECORD SHAPE w/ thumb_image is uploaded - { - slug: 'unicode_org', - name: 'unicode.org', - full_name: 'unicode.org', - homepage: 'https://unicode.org', - version: '71.1.1', - last_modified: '2022-09-26T19:46:25.000Z', - thumb_image: [ - { - id: 'attQVgaRUXOYinsWy', - width: 640, - height: 534, - url: 'https://dl.airtable.com/.attachments/f2465c36a0060919368e2f53305694f9/cfab76a8/gen-art-1.png', - filename: 'gen-art-1.png', - size: 184878, - type: 'image/png', - thumbnails: [Object] - } - ] - } - TODO IMAGE UPLOAD to S3/CDN: - if thumb_image_url is empty - get thumb_image data - upload to s3 - update thumb_image_url in airtable - */ - return packages; + const packages: AirtablePackage[] = allRecords.map((record) => { + return { + airtable_record_id: record.id, + ..._.pick(record.fields, [ + 'slug', + 'homepage', + 'maintainer', + 'name', + 'version', + 'last_modified', + 'full_name', + ]), + maintainer: record.fields?.maintainer || '', + desc: record.fields?.description || '', + thumb_image_url: _.get(record.fields, 'thumb_image[0].url', '/Images/package-thumb-nolabel3.jpg') + } as AirtablePackage; + }); + /** + * // SAMPLE RECORD SHAPE w/ thumb_image is uploaded + { + slug: 'unicode_org', + name: 'unicode.org', + full_name: 'unicode.org', + homepage: 'https://unicode.org', + version: '71.1.1', + last_modified: '2022-09-26T19:46:25.000Z', + thumb_image: [ + { + id: 'attQVgaRUXOYinsWy', + width: 640, + height: 534, + url: 'https://dl.airtable.com/.attachments/f2465c36a0060919368e2f53305694f9/cfab76a8/gen-art-1.png', + filename: 'gen-art-1.png', + size: 184878, + type: 'image/png', + thumbnails: [Object] + } + ] + } + TODO IMAGE UPLOAD to S3/CDN: + if thumb_image_url is empty + get thumb_image data + upload to s3 + update thumb_image_url in airtable + */ + return packages; } \ No newline at end of file diff --git a/lambdas/src/libs/dist_tea_xyz.ts b/lambdas/src/libs/dist_tea_xyz.ts index 1a5c8ef..f22099e 100644 --- a/lambdas/src/libs/dist_tea_xyz.ts +++ b/lambdas/src/libs/dist_tea_xyz.ts @@ -1,6 +1,6 @@ import S3 from 'aws-sdk/clients/s3'; import { compareVersions, validate } from 'compare-versions'; - +import _ from 'lodash'; import type { S3Package } from './types'; const Bucket = process.env.AWS_DIST_BUCKET; diff --git a/lambdas/src/libs/types.ts b/lambdas/src/libs/types.ts index 69c51a6..09d2856 100644 --- a/lambdas/src/libs/types.ts +++ b/lambdas/src/libs/types.ts @@ -1,21 +1,21 @@ export interface S3Package { - slug: string, - version: string, - full_name: string, - name: string, - maintainer: string, - homepage: string, - // key: string, - last_modified: Date | string, + slug: string, + version: string, + full_name: string, + name: string, + maintainer: string, + homepage: string, + // key: string, + last_modified: Date | string, } export type AirtablePackage = S3Package & { - airtable_record_id: string, - thumb_image_url: string, - desc: string, + airtable_record_id: string, + thumb_image_url: string, + desc: string, } export type Package = Omit & { - airtable_record_id?: string, - installs: number, + airtable_record_id?: string, + installs: number, } \ No newline at end of file From 1d6f4c3d2e94dfb833b587823cb0771a776fe544 Mon Sep 17 00:00:00 2001 From: neil Date: Thu, 20 Oct 2022 09:57:52 +0800 Subject: [PATCH 30/37] include algolia indexed package data in the packages.json and airtable record/s --- lambdas/package.json | 1 + .../src/functions/buildPackages/handler.ts | 22 +++- lambdas/src/functions/buildPackages/index.ts | 4 +- lambdas/src/libs/airtable.ts | 30 ++++- lambdas/src/libs/algolia.ts | 32 +++++ lambdas/src/libs/types.ts | 5 + lambdas/yarn.lock | 124 ++++++++++++++++++ 7 files changed, 209 insertions(+), 9 deletions(-) create mode 100644 lambdas/src/libs/algolia.ts diff --git a/lambdas/package.json b/lambdas/package.json index 32980fa..01eab93 100644 --- a/lambdas/package.json +++ b/lambdas/package.json @@ -13,6 +13,7 @@ "@middy/core": "^3.4.0", "@middy/http-json-body-parser": "^3.4.0", "airtable": "^0.11.5", + "algoliasearch": "^4.14.2", "aws-sdk": "^2.1234.0", "axios": "^1.1.3", "compare-versions": "^5.0.1", diff --git a/lambdas/src/functions/buildPackages/handler.ts b/lambdas/src/functions/buildPackages/handler.ts index 851c8d7..e2af809 100644 --- a/lambdas/src/functions/buildPackages/handler.ts +++ b/lambdas/src/functions/buildPackages/handler.ts @@ -2,7 +2,8 @@ import type { Package, AirtablePackage, S3Package } from '@libs/types'; import _ from 'lodash'; import { getAllS3Packages, writePackagesToS3 } from '@libs/dist_tea_xyz'; -import { getAllAirtablePackages } from '@libs/airtable'; +import { getAllAirtablePackages, insertPackagesToAirtable } from '@libs/airtable'; +import { getBestMatchingIndexedPackage } from '@libs/algolia'; type NewAirtablePackage = Partial; @@ -22,7 +23,10 @@ const buildPackages = async () => { packagesJson, } = await getFinalPackagesData(allS3Packages, airtablePackages); - await writePackagesToS3(packagesJson); + await Promise.all([ + insertPackagesToAirtable(newPackages), + writePackagesToS3(packagesJson), + ]); } catch (error) { console.error(error); } @@ -57,17 +61,21 @@ const getFinalPackagesData = async (s3Packages: S3Package[], airtablePackages: A } packagesJson.push(finalPackage); } else { + const matchingIndexedPackage = await getBestMatchingIndexedPackage(s3Package.full_name); + const desc = matchingIndexedPackage ? matchingIndexedPackage.desc : ''; + const homepage = s3Package.homepage || _.get(matchingIndexedPackage, 'homepage', ''); + const newPackage: NewAirtablePackage = { ...s3Package, - // TODO: - desc: '', // get this from algolia - homepage: s3Package.homepage || '', // get from algolia + desc, + homepage, } const tempPackage: Package = { ...s3Package, + homepage, + desc, + installs: 0, // TODO: get from algolia thumb_image_url: '', - desc: '', - installs: 0, } newPackages.push(newPackage); packagesJson.push(tempPackage); diff --git a/lambdas/src/functions/buildPackages/index.ts b/lambdas/src/functions/buildPackages/index.ts index a710627..7573389 100644 --- a/lambdas/src/functions/buildPackages/index.ts +++ b/lambdas/src/functions/buildPackages/index.ts @@ -7,6 +7,8 @@ export default { environment: { AIRTABLE_API_KEY: '${ssm:/airtable/api_key}', AIRTABLE_PACKAGES_BASE: '${ssm:/airtable/packages_base}', - AWS_DIST_BUCKET: '${ssm:AW5_S3_BUCKET}' + AWS_DIST_BUCKET: '${ssm:AW5_S3_BUCKET}', + ALGOLIA_APP_ID: '${ssm:/algolia/app_id}', + ALGOLIA_SEARCH_API_KEY: '${ssm:/algolia/search_api_key}', } }; diff --git a/lambdas/src/libs/airtable.ts b/lambdas/src/libs/airtable.ts index b267798..a8238b0 100644 --- a/lambdas/src/libs/airtable.ts +++ b/lambdas/src/libs/airtable.ts @@ -1,4 +1,4 @@ -import { base } from 'airtable'; +import { base, FieldSet } from 'airtable'; import _ from 'lodash'; import type { AirtablePackage } from './types'; @@ -59,4 +59,32 @@ export const getAllAirtablePackages = async (): Promise => { update thumb_image_url in airtable */ return packages; +} + +type NewPackageRecord = { + fields: Partial
+} + +export const insertPackagesToAirtable = async (newPackages: Partial[]) => { + console.log(`airtable: inserting new packages(${newPackages.length})`); + try { + const newRecords: NewPackageRecord[] = newPackages.map((fields) => { + return { + fields: { + ...fields, + last_modified: fields.last_modified.toString(), + } + } + }); + + // airtable can only insert 10 at a time + const insertBatches = _.chunk(newRecords, 10); + for(const batch of insertBatches) { + await airtablePackagesBase('packages').create(batch); + } + console.info(`airtable: new packages(${newPackages.length}) inserted`) + } catch (error) { + console.error(error); + console.log(`airtable: failed to insert packages(${newPackages.length})!`); + } } \ No newline at end of file diff --git a/lambdas/src/libs/algolia.ts b/lambdas/src/libs/algolia.ts new file mode 100644 index 0000000..2679e4f --- /dev/null +++ b/lambdas/src/libs/algolia.ts @@ -0,0 +1,32 @@ +import algoliasearch from 'algoliasearch'; +import _ from 'lodash'; + +import type { AlgoliaIndexedPackage } from './types'; + +const appId = process.env.ALGOLIA_APP_ID; +const searchApiKey = process.env.ALGOLIA_SEARCH_API_KEY; + +const client = algoliasearch(appId, searchApiKey); + +const packagesIndex = client.initIndex('dev_packages'); + +export const getBestMatchingIndexedPackage = async (name: string): Promise => { + const { hits: [bestMatch] } = await packagesIndex.search(name); + if (bestMatch) { + /** + * sample hit: + * { + name: 'pyyaml', + full_name: 'pyyaml', + desc: 'YAML framework for Python', + homepage: 'https://pyyaml.org', + version: '6.0', + objectID: 'pyyaml', + _highlightResult: [Object] + } + */ + return { + ..._.omit(bestMatch, ['_highlightResult']), + } as unknown as AlgoliaIndexedPackage; + } +} \ No newline at end of file diff --git a/lambdas/src/libs/types.ts b/lambdas/src/libs/types.ts index 09d2856..7381688 100644 --- a/lambdas/src/libs/types.ts +++ b/lambdas/src/libs/types.ts @@ -18,4 +18,9 @@ export type AirtablePackage = S3Package & { export type Package = Omit & { airtable_record_id?: string, installs: number, +} + +export type AlgoliaIndexedPackage = Omit & { + objectID: string; + desc: string; } \ No newline at end of file diff --git a/lambdas/yarn.lock b/lambdas/yarn.lock index b451469..d7de5c0 100644 --- a/lambdas/yarn.lock +++ b/lambdas/yarn.lock @@ -10,6 +10,110 @@ d "1" es5-ext "^0.10.47" +"@algolia/cache-browser-local-storage@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.2.tgz#d5b1b90130ca87c6321de876e167df9ec6524936" + integrity sha512-FRweBkK/ywO+GKYfAWbrepewQsPTIEirhi1BdykX9mxvBPtGNKccYAxvGdDCumU1jL4r3cayio4psfzKMejBlA== + dependencies: + "@algolia/cache-common" "4.14.2" + +"@algolia/cache-common@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.14.2.tgz#b946b6103c922f0c06006fb6929163ed2c67d598" + integrity sha512-SbvAlG9VqNanCErr44q6lEKD2qoK4XtFNx9Qn8FK26ePCI8I9yU7pYB+eM/cZdS9SzQCRJBbHUumVr4bsQ4uxg== + +"@algolia/cache-in-memory@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.14.2.tgz#88e4a21474f9ac05331c2fa3ceb929684a395a24" + integrity sha512-HrOukWoop9XB/VFojPv1R5SVXowgI56T9pmezd/djh2JnVN/vXswhXV51RKy4nCpqxyHt/aGFSq2qkDvj6KiuQ== + dependencies: + "@algolia/cache-common" "4.14.2" + +"@algolia/client-account@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.14.2.tgz#b76ac1ba9ea71e8c3f77a1805b48350dc0728a16" + integrity sha512-WHtriQqGyibbb/Rx71YY43T0cXqyelEU0lB2QMBRXvD2X0iyeGl4qMxocgEIcbHyK7uqE7hKgjT8aBrHqhgc1w== + dependencies: + "@algolia/client-common" "4.14.2" + "@algolia/client-search" "4.14.2" + "@algolia/transporter" "4.14.2" + +"@algolia/client-analytics@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.14.2.tgz#ca04dcaf9a78ee5c92c5cb5e9c74cf031eb2f1fb" + integrity sha512-yBvBv2mw+HX5a+aeR0dkvUbFZsiC4FKSnfqk9rrfX+QrlNOKEhCG0tJzjiOggRW4EcNqRmaTULIYvIzQVL2KYQ== + dependencies: + "@algolia/client-common" "4.14.2" + "@algolia/client-search" "4.14.2" + "@algolia/requester-common" "4.14.2" + "@algolia/transporter" "4.14.2" + +"@algolia/client-common@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.14.2.tgz#e1324e167ffa8af60f3e8bcd122110fd0bfd1300" + integrity sha512-43o4fslNLcktgtDMVaT5XwlzsDPzlqvqesRi4MjQz2x4/Sxm7zYg5LRYFol1BIhG6EwxKvSUq8HcC/KxJu3J0Q== + dependencies: + "@algolia/requester-common" "4.14.2" + "@algolia/transporter" "4.14.2" + +"@algolia/client-personalization@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.14.2.tgz#656bbb6157a3dd1a4be7de65e457fda136c404ec" + integrity sha512-ACCoLi0cL8CBZ1W/2juehSltrw2iqsQBnfiu/Rbl9W2yE6o2ZUb97+sqN/jBqYNQBS+o0ekTMKNkQjHHAcEXNw== + dependencies: + "@algolia/client-common" "4.14.2" + "@algolia/requester-common" "4.14.2" + "@algolia/transporter" "4.14.2" + +"@algolia/client-search@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.14.2.tgz#357bdb7e640163f0e33bad231dfcc21f67dc2e92" + integrity sha512-L5zScdOmcZ6NGiVbLKTvP02UbxZ0njd5Vq9nJAmPFtjffUSOGEp11BmD2oMJ5QvARgx2XbX4KzTTNS5ECYIMWw== + dependencies: + "@algolia/client-common" "4.14.2" + "@algolia/requester-common" "4.14.2" + "@algolia/transporter" "4.14.2" + +"@algolia/logger-common@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.14.2.tgz#b74b3a92431f92665519d95942c246793ec390ee" + integrity sha512-/JGlYvdV++IcMHBnVFsqEisTiOeEr6cUJtpjz8zc0A9c31JrtLm318Njc72p14Pnkw3A/5lHHh+QxpJ6WFTmsA== + +"@algolia/logger-console@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.14.2.tgz#ec49cb47408f5811d4792598683923a800abce7b" + integrity sha512-8S2PlpdshbkwlLCSAB5f8c91xyc84VM9Ar9EdfE9UmX+NrKNYnWR1maXXVDQQoto07G1Ol/tYFnFVhUZq0xV/g== + dependencies: + "@algolia/logger-common" "4.14.2" + +"@algolia/requester-browser-xhr@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.2.tgz#a2cd4d9d8d90d53109cc7f3682dc6ebf20f798f2" + integrity sha512-CEh//xYz/WfxHFh7pcMjQNWgpl4wFB85lUMRyVwaDPibNzQRVcV33YS+63fShFWc2+42YEipFGH2iPzlpszmDw== + dependencies: + "@algolia/requester-common" "4.14.2" + +"@algolia/requester-common@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.14.2.tgz#bc4e9e5ee16c953c0ecacbfb334a33c30c28b1a1" + integrity sha512-73YQsBOKa5fvVV3My7iZHu1sUqmjjfs9TteFWwPwDmnad7T0VTCopttcsM3OjLxZFtBnX61Xxl2T2gmG2O4ehg== + +"@algolia/requester-node-http@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.14.2.tgz#7c1223a1785decaab1def64c83dade6bea45e115" + integrity sha512-oDbb02kd1o5GTEld4pETlPZLY0e+gOSWjWMJHWTgDXbv9rm/o2cF7japO6Vj1ENnrqWvLBmW1OzV9g6FUFhFXg== + dependencies: + "@algolia/requester-common" "4.14.2" + +"@algolia/transporter@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.14.2.tgz#77c069047fb1a4359ee6a51f51829508e44a1e3d" + integrity sha512-t89dfQb2T9MFQHidjHcfhh6iGMNwvuKUvojAj+JsrHAGbuSy7yE4BylhLX6R0Q1xYRoC4Vvv+O5qIw/LdnQfsQ== + dependencies: + "@algolia/cache-common" "4.14.2" + "@algolia/logger-common" "4.14.2" + "@algolia/requester-common" "4.14.2" + "@cspotcode/source-map-support@^0.8.0": version "0.8.1" resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" @@ -354,6 +458,26 @@ ajv@^8.0.0, ajv@^8.11.0: require-from-string "^2.0.2" uri-js "^4.2.2" +algoliasearch@^4.14.2: + version "4.14.2" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.14.2.tgz#63f142583bfc3a9bd3cd4a1b098bf6fe58e56f6c" + integrity sha512-ngbEQonGEmf8dyEh5f+uOIihv4176dgbuOZspiuhmTTBRBuzWu3KCGHre6uHj5YyuC7pNvQGzB6ZNJyZi0z+Sg== + dependencies: + "@algolia/cache-browser-local-storage" "4.14.2" + "@algolia/cache-common" "4.14.2" + "@algolia/cache-in-memory" "4.14.2" + "@algolia/client-account" "4.14.2" + "@algolia/client-analytics" "4.14.2" + "@algolia/client-common" "4.14.2" + "@algolia/client-personalization" "4.14.2" + "@algolia/client-search" "4.14.2" + "@algolia/logger-common" "4.14.2" + "@algolia/logger-console" "4.14.2" + "@algolia/requester-browser-xhr" "4.14.2" + "@algolia/requester-common" "4.14.2" + "@algolia/requester-node-http" "4.14.2" + "@algolia/transporter" "4.14.2" + ansi-escapes@^4.2.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" From ccb4b3a5befe03e670e4b9f6b5446b0c11f6c03b Mon Sep 17 00:00:00 2001 From: neil Date: Thu, 20 Oct 2022 10:26:20 +0800 Subject: [PATCH 31/37] replace ssm credentials to have /lambdas/ prefix --- lambdas/src/functions/buildPackages/index.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lambdas/src/functions/buildPackages/index.ts b/lambdas/src/functions/buildPackages/index.ts index 7573389..f343b46 100644 --- a/lambdas/src/functions/buildPackages/index.ts +++ b/lambdas/src/functions/buildPackages/index.ts @@ -5,10 +5,10 @@ export default { handler: `${handlerPath(__dirname)}/handler.main`, events: [], environment: { - AIRTABLE_API_KEY: '${ssm:/airtable/api_key}', - AIRTABLE_PACKAGES_BASE: '${ssm:/airtable/packages_base}', - AWS_DIST_BUCKET: '${ssm:AW5_S3_BUCKET}', - ALGOLIA_APP_ID: '${ssm:/algolia/app_id}', - ALGOLIA_SEARCH_API_KEY: '${ssm:/algolia/search_api_key}', + AIRTABLE_API_KEY: '${ssm:/lambdas/airtable/api_key}', + AIRTABLE_PACKAGES_BASE: '${ssm:/lambdas/airtable/packages_base}', + AWS_DIST_BUCKET: '${ssm:/lambdas/dist_bucket}', + ALGOLIA_APP_ID: '${ssm:/lambdas/algolia/app_id}', + ALGOLIA_SEARCH_API_KEY: '${ssm:/lambdas/algolia/search_api_key}', } }; From 0980ac1ea4c63454bee65e9d8082a0b5ca85fc36 Mon Sep 17 00:00:00 2001 From: neil Date: Thu, 20 Oct 2022 10:36:04 +0800 Subject: [PATCH 32/37] test: if ssm permission allows /parameter/ prefix --- lambdas/src/functions/buildPackages/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lambdas/src/functions/buildPackages/index.ts b/lambdas/src/functions/buildPackages/index.ts index f343b46..3e219fb 100644 --- a/lambdas/src/functions/buildPackages/index.ts +++ b/lambdas/src/functions/buildPackages/index.ts @@ -7,7 +7,7 @@ export default { environment: { AIRTABLE_API_KEY: '${ssm:/lambdas/airtable/api_key}', AIRTABLE_PACKAGES_BASE: '${ssm:/lambdas/airtable/packages_base}', - AWS_DIST_BUCKET: '${ssm:/lambdas/dist_bucket}', + AWS_DIST_BUCKET: '${ssm:/parameter/lambdas/dist_bucket}', ALGOLIA_APP_ID: '${ssm:/lambdas/algolia/app_id}', ALGOLIA_SEARCH_API_KEY: '${ssm:/lambdas/algolia/search_api_key}', } From 0467487d572db448b0e2d717ddc91cb3871fd790 Mon Sep 17 00:00:00 2001 From: neil Date: Thu, 20 Oct 2022 10:42:52 +0800 Subject: [PATCH 33/37] remove test prefixes --- lambdas/src/functions/buildPackages/index.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lambdas/src/functions/buildPackages/index.ts b/lambdas/src/functions/buildPackages/index.ts index 3e219fb..7573389 100644 --- a/lambdas/src/functions/buildPackages/index.ts +++ b/lambdas/src/functions/buildPackages/index.ts @@ -5,10 +5,10 @@ export default { handler: `${handlerPath(__dirname)}/handler.main`, events: [], environment: { - AIRTABLE_API_KEY: '${ssm:/lambdas/airtable/api_key}', - AIRTABLE_PACKAGES_BASE: '${ssm:/lambdas/airtable/packages_base}', - AWS_DIST_BUCKET: '${ssm:/parameter/lambdas/dist_bucket}', - ALGOLIA_APP_ID: '${ssm:/lambdas/algolia/app_id}', - ALGOLIA_SEARCH_API_KEY: '${ssm:/lambdas/algolia/search_api_key}', + AIRTABLE_API_KEY: '${ssm:/airtable/api_key}', + AIRTABLE_PACKAGES_BASE: '${ssm:/airtable/packages_base}', + AWS_DIST_BUCKET: '${ssm:AW5_S3_BUCKET}', + ALGOLIA_APP_ID: '${ssm:/algolia/app_id}', + ALGOLIA_SEARCH_API_KEY: '${ssm:/algolia/search_api_key}', } }; From 8319762a1e1ebcb5537718c14d9c3e50c95e6ad9 Mon Sep 17 00:00:00 2001 From: neil Date: Thu, 20 Oct 2022 10:57:50 +0800 Subject: [PATCH 34/37] fix: description value should be ok prop --- lambdas/src/libs/airtable.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lambdas/src/libs/airtable.ts b/lambdas/src/libs/airtable.ts index a8238b0..fa3ce7d 100644 --- a/lambdas/src/libs/airtable.ts +++ b/lambdas/src/libs/airtable.ts @@ -26,7 +26,7 @@ export const getAllAirtablePackages = async (): Promise => { 'full_name', ]), maintainer: record.fields?.maintainer || '', - desc: record.fields?.description || '', + desc: record.fields?.desc || '', thumb_image_url: _.get(record.fields, 'thumb_image[0].url', '/Images/package-thumb-nolabel3.jpg') } as AirtablePackage; }); From e171f2b93493d41ac4dccec4e3e5b9af539ad55c Mon Sep 17 00:00:00 2001 From: neil Date: Thu, 20 Oct 2022 12:45:29 +0800 Subject: [PATCH 35/37] load images from airtable attachments as a static file within our deployment --- .github/prepare-thumb-images.sh | 30 +++++++ .github/workflows/staging.yml | 143 +++++++++++++++++--------------- .gitignore | 1 + 3 files changed, 106 insertions(+), 68 deletions(-) create mode 100755 .github/prepare-thumb-images.sh diff --git a/.github/prepare-thumb-images.sh b/.github/prepare-thumb-images.sh new file mode 100755 index 0000000..c4d2c9f --- /dev/null +++ b/.github/prepare-thumb-images.sh @@ -0,0 +1,30 @@ +#!/bin/bash +# cmd: $ ./prepare-thumb-images.sh srcJson targetPath +# sample: $ .github/prepare-thumb-images.sh src/data/packages.json src/static/Images/packages/ + +mkdir -p $2 +packages="cat $1" +temp_packages="./src/data/temp.json" +cp $1 $temp_packages +for row in $($packages | jq -r '.[] | @base64'); do + _jq() { + echo ${row} | base64 --decode | jq -r ${1} + } + + dl_url=$(_jq '.thumb_image_url') + if [[ $dl_url == *"https://dl.airtable.com/.attachments"* ]]; then + filename=$(basename -- "$dl_url") + extension="${filename##*.}" + filename="${filename%.*}" + slug=$(_jq '.slug') + outputPath=$2/$(_jq '.slug').$extension + new_thumb_image_url="/Images/packages/$slug.$extension" + curl $dl_url -o $2/$slug.$extension + updated_packages=$(jq '(.[] | select(.slug == "'$slug'") | .thumb_image_url) |= "'$new_thumb_image_url'"' ./src/data/temp.json) + echo $updated_packages > $temp_packages + echo "update $slug" + fi +done + +# replace packages.json with the updated version with localized image links +mv $temp_packages $1 \ No newline at end of file diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index 8885d24..3896154 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -29,83 +29,90 @@ jobs: args: -c "cd ./lambdas && serverless deploy" entrypoint: /bin/sh - # deploy: - # runs-on: ubuntu-latest - # steps: - # - name: inject slug/short variables - # uses: rlespinasse/github-slug-action@v3.x - # - name: Set STAGE variable in environment for next steps - # run: echo "STAGE=pr-${{ github.event.number }}-${{ env.GITHUB_HEAD_REF_SLUG }}" >> $GITHUB_ENV + deploy: + runs-on: ubuntu-latest + steps: + - name: inject slug/short variables + uses: rlespinasse/github-slug-action@v3.x + - name: Set STAGE variable in environment for next steps + run: echo "STAGE=pr-${{ github.event.number }}-${{ env.GITHUB_HEAD_REF_SLUG }}" >> $GITHUB_ENV - # - name: Create Deployment - # uses: bobheadxi/deployments@v1 - # id: deployment - # with: - # step: start - # env: ${{ env.STAGE }} - # ref: ${{ github.head_ref }} - # override: true + - name: Create Deployment + uses: bobheadxi/deployments@v1 + id: deployment + with: + step: start + env: ${{ env.STAGE }} + ref: ${{ github.head_ref }} + override: true - # - uses: actions/checkout@v3 + - uses: actions/checkout@v3 - # - name: Apply Staging Configuration - # run: | - # sed -i -e 's/^baseURL\s*=.*$/baseUrl = ""/i' config.toml - # echo "relativeurls = true" >>config.toml - # working-directory: src + - name: Apply Staging Configuration + run: | + sed -i -e 's/^baseURL\s*=.*$/baseUrl = ""/i' config.toml + echo "relativeurls = true" >>config.toml + working-directory: src - # - name: Copy packages.json summary from dist.tea.xyz - # uses: prewk/s3-cp-action@v2 - # with: - # aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }} - # aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - # source: 's3://dist.tea.xyz/mock_packages.json' - # dest: './src/data/packages.json' + - name: Copy packages.json summary from dist.tea.xyz + uses: prewk/s3-cp-action@v2 + with: + aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + source: 's3://dist.tea.xyz/mock_packages.json' + dest: './src/data/packages.json' - # - name: Create Package Detail Pages from packages.json - # uses: getneil/jq-action@v1 - # id: version - # with: - # cmd: '.github/build-package-pages.sh src/data/packages.json src/content/packages' + - name: Create Package Detail Pages from packages.json + uses: getneil/jq-action@v1 + id: version + with: + cmd: '.github/build-package-pages.sh src/data/packages.json src/content/packages' - # - run: .github/mk-pantry-accessible.sh ${{ secrets.TEMP_JACOBS_GITHUB_PAT }} + - name: Download package thumbnail images + uses: getneil/jq-action@v1 + id: version + with: + cmd: '.github/prepare-thumb-images.sh src/data/packages.json ./src/static/Images/packages/' - # - uses: teaxyz/setup@v0 - # with: - # target: build - # - name: Check for broken links - # uses: lycheeverse/lychee-action@v1 - # with: - # fail: true - # args: --verbose --no-progress './public/**/*.md' './public/**/*.html' - # env: - # GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + - run: .github/mk-pantry-accessible.sh ${{ secrets.TEMP_JACOBS_GITHUB_PAT }} - # - uses: actions/setup-node@v3 - # with: - # node-version: 14 - # - uses: bahmutov/npm-install@v1 - # with: - # working-directory: .cdk + - uses: teaxyz/setup@v0 + with: + target: build - # - uses: aws-actions/configure-aws-credentials@v1 - # with: - # aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} - # aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - # aws-region: us-east-1 + - name: Check for broken links + uses: lycheeverse/lychee-action@v1 + with: + fail: true + args: --verbose --no-progress './public/**/*.md' './public/**/*.html' + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} - # - name: Deploy to AWS - # id: cdk_deploy - # run: yarn deploy - # working-directory: .cdk + - uses: actions/setup-node@v3 + with: + node-version: 14 + - uses: bahmutov/npm-install@v1 + with: + working-directory: .cdk + + - uses: aws-actions/configure-aws-credentials@v1 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: us-east-1 + + - name: Deploy to AWS + id: cdk_deploy + run: yarn deploy + working-directory: .cdk - # - name: Seal Deployment - # uses: bobheadxi/deployments@v1 - # if: always() - # with: - # step: finish - # status: ${{ job.status }} - # deployment_id: ${{ steps.deployment.outputs.deployment_id }} - # env: ${{ env.STAGE }} - # env_url: ${{ steps.cdk_deploy.outputs.env_url }} + - name: Seal Deployment + uses: bobheadxi/deployments@v1 + if: always() + with: + step: finish + status: ${{ job.status }} + deployment_id: ${{ steps.deployment.outputs.deployment_id }} + env: ${{ env.STAGE }} + env_url: ${{ steps.cdk_deploy.outputs.env_url }} diff --git a/.gitignore b/.gitignore index 4002794..a142cf4 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ cdk.out # initially committed _sample.md only the rest will be ignored src/content/packages/* +src/static/Images/packages/* \ No newline at end of file From 0d1bd3b562531765ea4d21adf78afcd88e6fc0ca Mon Sep 17 00:00:00 2001 From: neil Date: Thu, 20 Oct 2022 12:46:01 +0800 Subject: [PATCH 36/37] fix: escape quotes in description in auto-gen markdown detail pages --- .github/build-package-pages.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/build-package-pages.sh b/.github/build-package-pages.sh index 37b3718..fdf97fa 100755 --- a/.github/build-package-pages.sh +++ b/.github/build-package-pages.sh @@ -10,7 +10,7 @@ for row in $(cat $1 | jq -r '.[] | @base64'); do content="--- type: page title: \"$(_jq '.name')\" -Description: \"$(_jq '.desc')\" +Description: \"$(_jq '.desc' | tr '\"' "'")\" layout: \"package-detail\" ---" echo "$content" > $2/$(_jq '.slug').md From 3fb2192fd757deb688aa63e52b00ca84e9c9b2e1 Mon Sep 17 00:00:00 2001 From: neil Date: Thu, 20 Oct 2022 12:50:07 +0800 Subject: [PATCH 37/37] remove version --- .github/workflows/staging.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index 3896154..6781a82 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -64,13 +64,11 @@ jobs: - name: Create Package Detail Pages from packages.json uses: getneil/jq-action@v1 - id: version with: cmd: '.github/build-package-pages.sh src/data/packages.json src/content/packages' - name: Download package thumbnail images uses: getneil/jq-action@v1 - id: version with: cmd: '.github/prepare-thumb-images.sh src/data/packages.json ./src/static/Images/packages/'